Android--Jsonrpc4j的使用

转载请声明地址: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


使用方法:

一、导包

具体步骤就不说了


二、具体使用


//连接服务器
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");
}


// 出现LinkedHashMapJsonObject出错情况时,将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'

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值