iOS开发Hessian

HessianKit使用参考资料比较少,通过摸索,把测试过程贴出来,代码很乱,未整理,先实现功能,再应用到项目中.供新手参考.如有问题,跟帖指正...

HessianService与Java Server端的接口一样.

import <UIKit/UIKit.h>

import "CWHessianArchiver.h"

import "User.h"

@protocol HessianService

-(NSString *) sayHello; //定一个无参方法,返回string类型

-(NSString *) yy:(NSString *)userName;//传递一个string参数,返回string参数

-(id<User>) getHessianModel;//无参,返回一个User类型的对象.在Java Server端中有一个实体类与之对应

-(BOOL)save:(NSString *)userName;

-(NSArray *)listAll;

-(void)save2:(NSString *)username password:(NSString *)password;

-(int)syn:(NSMutableArray *)list;

-(int)suser:(id<User>)user;

-(int)slist:(NSMutableArray<User>*)list; //传递list 数组

@end

//以下是测试方法 要引入相关的头文件

//server URL

NSURL *url = [NSURL

URLWithString:@http://192.168.1.102:8080/SignInService/mvc/hessian/hessianService];

//设置代理类

id<HessianService> proxy = (id<HessianService>)[CWHessianConnection proxyWithURL:url

protocol:@protocol(HessianService)];

//客户端与服务器端的方法关联.可以用不一样的方法名.通过 CWHessianArchiver 映射,就可以解决找不到方法

[CWHessianArchiver setMethodName:@"yy_1" forSelector:@selector(yy:)];

[CWHessianArchiver setMethodName:@"getHessianModel" forSelector:@selector(getHessianModel)];

[CWHessianArchiver setMethodName:@"save" forSelector:@selector(save:)];

[CWHessianArchiver setMethodName:@"listAll" forSelector:@selector(listAll)];

[CWHessianArchiver setMethodName:@"save2" forSelector:@selector(save2:password:)];

[CWHessianArchiver setMethodName:@"syn" forSelector:@selector(syn:)];

//User 与服务器端的com.listentek.signIn.server.model.User进行关联映射,否则找不到实体类.带上包名.

[CWHessianArchiver setClassName:@"com.listentek.signIn.server.model.User"forProtocol:@protocol(User)];

[CWHessianArchiver setMethodName:@"slist" forSelector:@selector(slist:)];

//调用方法很简单,

//调用sayHello方法

NSLog(@"xxx:%@",[proxy sayHello]);

NSString *re = @"hello";

NSLog(@"web:%@",[proxy yy:re]);

id<User> user = [proxy getHessianModel];

NSLog(@"name=%@",[user objectForKey:@"password"]);

//传递单个数据

NSLog(@"save:%@",[proxy save:re]);

//获取list数据

NSArray *array = [proxy listAll];

for(id user2 in array){

NSLog(@"name=%@",[user2 objectForKey:@"password"]);

}

[proxy save2:@"hehe" password:@"yyy"];

//声明实体类 查看CWValueObject 源码,  valueObjectWithProtocol方法中,为@protocol User 初始化,分配内存.

id<User> u = (id<User>)[CWValueObject valueObjectWithProtocol:@protocol(User)];

[u setPassword:@"xxx"];

[u setUserName:@"yyy"];

NSLog(@"%@",u);

NSLog(@"pass=%@,name=%@",u.password,u.userName);

[proxy suser:u];

//传递数组

NSMutableArray  *array3 = [[NSMutableArray  alloc] init];

[array3 addObject:u];

for (int k=1; k<3; k++) {

id<User> u2 = (id<User>)[CWValueObject valueObjectWithProtocol:@protocol(User)];

u2.password = [NSString stringWithFormat:@"k%d",k];

u2.userName = [NSString stringWithFormat:@"k%d",k];

[array3 addObject:u2];

}

[proxy slist:array3];

时间: 2024-11-06 19:58:28

iOS开发Hessian的相关文章

iOS开发tips-神奇的UITableView

概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于UITableView的具体用法有详细的描述,今天主要看一些UITableView开发中的常见一些坑,这些坑或许不深,但是如果开发中注意不到的话往往比较浪费时间. 神奇的section header 事情的起因是一个网友说要实现一个类似下图界面,但是不管是设置sectionHeaderHeight还是代理方法中实现func tableView(_ tableView: UITableView, heightFor

iOS开发网络篇—文件的上传

iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @inter

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接) 这里推荐两款好用的Xcode插件,并提供下载链接. 一.插件和使用如下: 1.两款插件 对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master 提供快速创建自动注释:VVDocumenter-Xcode-master 2.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. (2)VVDocumenter-Xcode-master能提供

IOS 开发环境,证书和授权文件等详解

一.成员介绍 1.    Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1)    Developer Certification(开发证书) 安装在电脑上提供权限:开发人员通过设备进行真机测试. 可以生成副本供多台电脑安装: 2)      Distribution Certification(发布证书) 安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序. 不可生成副本,仅有配置该证书的电脑才可使用:(副本制做介绍在

iOS开发之保存照片到系统相册(Photo Album)

iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIImageView 创建UIImageView是为了将照片展示出来,我们是要把UIImage保存到系统相册(Photo Album): #define SCREEN [UIScreen mainScreen].bounds.size self.image = [UIImage imageNamed:@"i

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConnection的使用,如有需要了解NSURLConnection如何发送请求. 详细信息,请参考:http://www.cnblogs.com/wendingding/p/3813706.html 3)本文示例代码发送的请求均为http请求,已经对info.plist文件进行配置. 如何配置,请参考:

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤

iOS开发——多线程OC篇&amp;GCD实用总结

GCD实用总结 图片下载 注:iOS开发中常见GCD的实用也就这些了, 先来看看之前我们经常使用的方式: 1 static NSOperationQueue * queue; 2 3 - (IBAction)someClick:(id)sender { 4 self.indicator.hidden = NO; 5 [self.indicator startAnimating]; 6 queue = [[NSOperationQueue alloc] init]; 7 NSInvocationO

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的