json-rpc是基于json的跨语言远程调用协议,比xml-rpc、webservice等基于文本的协议传输数据格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是非常优秀的一种远程调用协议。目前主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用,又可与spring无缝集合,比较适合于基于spring的项目开发。
json-rpc协议非常简单,发起远程调用时向服务端传输数据格式如下:
{ "method": "main", "params": ["JSON-RPC"], "id": 1}
json-rpc返回数据
{ "result":"Hello JSON-RPC","error": null,"id":1}
private void postRpc() {
Map params = new HashMap<>();
params.put("userid", 10);
ZyNetHttps.getInstances()
.newBuilder("http://zhanyun/shop?", "Main")//设置请求路径和请求方法名
.tag(this)//当前请求标识
.params(params)//请求参数
.isInputDecryption(false)//输入加密
.isOutputDecryption(false)//输出加密
.ctime(30)//连接时间
.wtime(10)//写入时间
.rtime(10)//读取时间
.callBack(new GsonResponseHandler() {//请求回调
@Override
public void onFinish(int statusCode) {
LogHelper.e(statusCode + "");
}
@Override
public void onFailure(int statusCode, String error_msg) {
LogHelper.e(error_msg);
}
@Override
public void onSuccess(int statusCode, ModelMain response) {
}
})
.RPC();//请求类型
}
private void post() {
Map params = new HashMap<>();
params.put("userid", 10);
ZyNetHttps.getInstances()
.newBuilder("http://zhanyun/shop?")
.tag(this)
.params(params)
.callBack(new GsonResponseHandler() {
@Override
public void onFinish(int statusCode) {
LogHelper.e(statusCode + "");
}
@Override
public void onFailure(int statusCode, String error_msg) {
LogHelper.e(error_msg);
}
@Override
public void onSuccess(int statusCode, ModelMain response) {
}
})
.POST();
}
private void get() {
Map params = new HashMap<>();
params.put("userid", 10);
ZyNetHttps.getInstances()
.newBuilder("http://zhanyun/shop?")
.tag(this)
.params(params)
.callBack(new StrResponseHandler() {
@Override
public void onSuccess(int statusCode, String response) {
}
@Override
public void onFinish(int statusCode) {
}
@Override
public void onFailure(int statusCode, String error_msg) {
}
})
.GET();
}
private void download() {
ZyNetHttps.getInstances()
.newBuilder("http://zhanyun/shop?")
.filedir("/android/")
.filedname("android.png")
.callBack(new DownloadResponseHandler() {
@Override
public void onFinish(int statusCode) {
}
@Override
public void onFailure(int statusCode, String error_msg) {
}
@Override
public void onProgress(long currentBytes, long totalBytes) {
}
})
.DOWNLOAD();
}
private void cancel(Context mContex) {
ZyNetHttps.getInstances().cancel(mContex);
}
github地址:https://github.com/GHdeng/ZyNetHttps
感觉封装得还是不够完善,欢迎大家吐槽Issues。
我们都是站在巨人的肩膀上:
参考
- https://github.com/hongyangAndroid/okhttputils
- https://github.com/tsy12321/BaseAndroidProject