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];
iOS开发Hessian的更多相关文章
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- iOS开发系列--打造自己的“美图秀秀”
--绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...
- iOS开发之再探多线程编程:Grand Central Dispatch详解
Swift3.0相关代码已在github上更新.之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread.操作队列以及GCD,介绍的不够深入.今天就以GCD为主题来全面的总结一下GCD ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
随机推荐
- 淘金客II项目问题日志(AngularJs+BootStrap+Api接口开发)
问题二: 组件,如果是modal框,那么show的时候,是不会load它的(因为load有时候是需要传送数据的),需要别的组件去主动load它.那么问题来了:哪些框直接show,哪些框不仅需要show ...
- 关于C# winform中使用pictureBox显示大红叉的原因
pictureBox的关于image的属性有三 个,InitalImage,Image,ErrorImage分别表示picturebox的默认初始图片,当前可以设置的图片和出错之后默认显示的图 片,而 ...
- GitHub上删除项目
1. 在自己的repositories中,选择要删除的项目,左击. 2. 选择 [Settings] 3. 选择 [Delete ** ] 4. 在弹出框中 输入 要删除的项目名,点击下方的按钮 ...
- php链接mysql数据库
php连接数据库有三种方法,刚刚发现通过mysql_connect,mysql_query连接已被废弃,而现在推荐的是通过“面向对象方法”和“PDO方法”连接数据库. 而我在使用面向对象的方法连接时, ...
- :nth-child(an+b)
语法: :nth-child(an+b)为什么选择它,因为我认为,这个选择器是最多学问的一个了.很可惜,据我所测,目前能较好地支持她的只有Opera9+和Safari3+. 描述: 伪类:nth-ch ...
- 对Oracle10g rac srvctl命令使用理解
srvctl命令是RAC维护中最常用到的命令,也最为复杂,使用这个命令可以操作CRS上的Database,Instance,ASM,Service.Listener和Node Application资 ...
- php图片转为资源数据
$file='C:\Users\feng\Desktop\images\banner.png'; //图片路径 $type=getimagesize($file); ...
- java 正则表达式获取匹配和非获取匹配
package test1; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestExp ...
- CSS权威指南 - 基本视觉格式化 4
改变元素显示 没有讨论与表格相关的.列表list-item的值.之后讨论. 改变显示角色 显示为块级元素 将一串链接(行内元素)改变垂直放置,若有如下一连串的链接: <div id=" ...
- 利用Sonar规则结合WebStorm进行Code Inspect
1.目的 在编写代码时会受到公司Sonar规则的限制,不想在编写完成后再对代码进行Inspect,回头再来一个个修正,费时费力. 那么,下面将通过优秀的WebStorm开发工具自身的CodeInspe ...