Android--Jsonrpc4j的使用
2016-06-22 08:39
661 查看
转载请声明地址:http://blog.csdn.net/skyunicorn/article/details/51731605
jsonrpc4j调用的库有三个(jsonrpc4j.jar 、jsonrpc4j-sources.jar 、jsonrpc4j-javadoc.jar)
jsonrpc4j下载地址:http://download.csdn.net/detail/skyunicorn/9555833
但是调用jsonrpc4j的时候还要依赖三个包(好麻烦,我当时用的时候不知道,结果搞这个都要奔溃了)
(另外我在这吐槽一下:CSDN文章审批太慢,而且传个jar包,竟然让我传了3-4次,搞什么啊)
jackson-annotations.jar http://download.csdn.net/detail/skyunicorn/9556107
jackson-core-.jar http://download.csdn.net/detail/skyunicorn/9556128
jackson-databind.jar http://download.csdn.net/detail/skyunicorn/9556110
使用方法:
一、导包
具体步骤就不说了
二、具体使用
以上便登录成功了。
我们再调用其他方法试下:
前面我们登录后,拿到了session_id,后面的方法调用需要用到
我们看下后台需求的格式:
{
'model':'aaaa'
'method':'bbbb'
'args':[[1]]
'kwargs': {'fields': ['id', 'name']}
}
根据需求我们设置传参
// 出现LinkedHashMap转JsonObject出错情况时,将JsonArray强转为LinkedHashMap然后取值
Log.d(TAG, "array---" + ((LinkedHashMap)array.get(0)).get("name").toString());
暂时搞了这么多,谁有更简单的方法,请留言让我学习下,谢谢。
Demo因为涉及公司URL就不提供了,主要代码都贴上了。
注:我后来尝试下,发现将数据转为JSONObject再取值会更方便(2016.9.26修改)
在bulid里添加Gson库
compile 'com.google.code.gson:gson:2.2.4'
然后取值
Object object = client.invoke("method", map, Object.class);
Gson gson = new Gson();
JSONObject jsonObject = new JSONObject(gson.toJson(object));
然后直接按Json格式取值就可以
感谢 燕智凯 提供的依赖地址(2017.1.20修改)
compile 'com.github.briandilley.jsonrpc4j:jsonrpc4j:1.5.0'
jsonrpc4j调用的库有三个(jsonrpc4j.jar 、jsonrpc4j-sources.jar 、jsonrpc4j-javadoc.jar)
jsonrpc4j下载地址:http://download.csdn.net/detail/skyunicorn/9555833
但是调用jsonrpc4j的时候还要依赖三个包(好麻烦,我当时用的时候不知道,结果搞这个都要奔溃了)
(另外我在这吐槽一下:CSDN文章审批太慢,而且传个jar包,竟然让我传了3-4次,搞什么啊)
jackson-annotations.jar http://download.csdn.net/detail/skyunicorn/9556107
jackson-core-.jar http://download.csdn.net/detail/skyunicorn/9556128
jackson-databind.jar http://download.csdn.net/detail/skyunicorn/9556110
使用方法:
一、导包
具体步骤就不说了
二、具体使用
//连接服务器 JsonRpcHttpClient client = new JsonRpcHttpClient(new URL(path)); // path为URL //设置传递对象 Map<String, String> login = new HashMap<String, String>(); login.put("db",db); //db为参数 login.put("login",user); //user为参数 login.put("password", pwd); //pwd为参数 //调用方法连接(invoke(method,object,returnType)) Map map = client.invoke("method", login, Map.class); 获取返回对象的session_id if (SessionID == "") { JSONObject jsonObject = new JSONObject(map);//此处的JSONObject为org.json包下的 SessionID = jsonObject.optString("session_id"); Log.d("SessionID", SessionID); }
以上便登录成功了。
我们再调用其他方法试下:
前面我们登录后,拿到了session_id,后面的方法调用需要用到
// 连接URL并设置SessionID JsonRpcHttpClient client = new JsonRpcHttpClient(new URL(path)); // 设置头部传SessionID Map<String, String> headers = new HashMap<String, String>(); headers.put("Session_ID", SessionID); // 请咨询后台的SessionID名 client.setHeaders(headers); // 设置连接超时 client.setConnectionTimeoutMillis(5000); client.setReadTimeoutMillis(5000);
我们看下后台需求的格式:
{
'model':'aaaa'
'method':'bbbb'
'args':[[1]]
'kwargs': {'fields': ['id', 'name']}
}
根据需求我们设置传参
//整体对象 Map<String, Object> map = new HashMap<String, Object>(); //model传值 map.put("model", "aaaa"); //method传值 map.put("method", "bbbb"); //设置args里的列表(就是这里坑了我好久) List argsList = new ArrayList(); List itemList = new ArrayList(); itemList.add(1); argsList.add(itemList); //args传值 map.put("args", argsList); //定义kwargs里的对象 Map<String, Object> kwargsMap = new HashMap<>(); //设置kwargs里的列表 List kwargsList = new ArrayList(); kwargsList.add("id"); kwargsList.add("name"); //设置kwargs里的对象 kwargsMap.put("fields", kwargsList); //kwargs传值 map.put("kwargs", kwargsMap); //发送请求:(获取数据类型转为List) List list = client.invoke("method", map, List.class); //第一个参数是方法名,请咨询后台 // 将获取的数据转为JSONArray JSONArray array = new JSONArray(list); // 遍历jsonArray转为jsonObject for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); Log.d(TAG, object.toString()); String name = object.optString("name"); }
// 出现LinkedHashMap转JsonObject出错情况时,将JsonArray强转为LinkedHashMap然后取值
Log.d(TAG, "array---" + ((LinkedHashMap)array.get(0)).get("name").toString());
暂时搞了这么多,谁有更简单的方法,请留言让我学习下,谢谢。
Demo因为涉及公司URL就不提供了,主要代码都贴上了。
注:我后来尝试下,发现将数据转为JSONObject再取值会更方便(2016.9.26修改)
在bulid里添加Gson库
compile 'com.google.code.gson:gson:2.2.4'
然后取值
Object object = client.invoke("method", map, Object.class);
Gson gson = new Gson();
JSONObject jsonObject = new JSONObject(gson.toJson(object));
然后直接按Json格式取值就可以
感谢 燕智凯 提供的依赖地址(2017.1.20修改)
compile 'com.github.briandilley.jsonrpc4j:jsonrpc4j:1.5.0'
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories