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的更多相关文章

  1. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  2. iOS开发系列--打造自己的“美图秀秀”

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  3. iOS开发之再探多线程编程:Grand Central Dispatch详解

    Swift3.0相关代码已在github上更新.之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread.操作队列以及GCD,介绍的不够深入.今天就以GCD为主题来全面的总结一下GCD ...

  4. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  5. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  6. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  7. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  8. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  9. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

随机推荐

  1. 小Experience__要懂得努力

    来到郎沃这么久了,在这里学到了很多,对于一个从未摸过电脑的农村孩子来说,我为自己感到自豪,我不自卑,also.也不会骄傲. 我很清楚的记得爸妈给我说的什么,for myself,for parents ...

  2. Sumsets

    题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91209#problem/A 题意:给定一个整数几何S,找出一个最大的d,使得a ...

  3. 利用Jquery给当前页或者跳转后页面的导航栏添加选中后样式

    具体的样式有两种情况,一种是直接给当前页面添加特殊样式,当网页刷新或者跳转到下一页后,样式消失:另一种情况是即使刷新页面后样式仍然有效. 直接上代码: 第一种情况: 在CODE上查看代码片派生到我的代 ...

  4. jq图片点击居中放大原始图片兼容ie

    /* *鍥剧墖澶у浘鏄剧ず */ function imgshow(){ content_div:"";//内容 bg_div:"";//背景变暗 img_di ...

  5. android之简单图形绘制

    首先编写MyView类 代码如下: package com.example.myhello; import android.content.Context; import android.graphi ...

  6. Mysql的一些常用命令

    Mysql基本操作 创建表: create table test01_02(id varchar(50) not null auto_increment primary key, name nvarc ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 【iCore3 双核心板】例程一:ARM驱动三色LED

    实验指导书及代码包下载: http://pan.baidu.com/s/1o6w6Xnk iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  9. php高并发状态下文件的读写

    php高并发状态下文件的读写   背景 1.对于PV不高或者说并发数不是很大的应用,不用考虑这些,一般的文件操作方法完全没有问题 2.如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件 ...

  10. lua 可变参数

    问题:对可变参数传递的时候,采用如下方案: local cellData = {MsgText = msgText,Param = ...,CallBackFunc = callBackFunc,Ca ...