原来泛型可以这样用:

网络返回基类,返回一个code,msg,body,其中body不确定,所以,我们把它写成泛型

import org.json.JSONObject;

/**
* 网络请求的基类
* Created by on 16/7/14.
*/
public class NetData<T> {
public static final int STATUS_OK = 0;
public int code = -1;
public String msg;
public T body; /**
* code码是否正确
* @return
*/
public boolean isCodeOk(){
return code == STATUS_OK;
} public JSONObject getJSONBody(JSONObject data){
if(data == null){
return null;
} return data.optJSONObject("body");
} public JSONObject getJSONBody(String data){
JSONObject jsonObj = convertStrToJSON(data);
return getJSONBody(jsonObj);
} public void parseHead(String json){
JSONObject jsonObject = convertStrToJSON(json);
if(jsonObject != null){
parseHead(jsonObject);
}
} public void parseHead(JSONObject obj){
try {
if(obj == null){
return;
}
code = obj.optInt("code");
msg = obj.optString("msg");
}catch (Exception e){
e.printStackTrace();
}
} public JSONObject convertStrToJSON(String json){
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
}catch (Exception e){
e.printStackTrace();
} return jsonObject;
}
}

具体类:

public class PlugUpdateInfo {
public boolean mNeedUpdate;
public String mVersion;
public String mDownloadUrl;
public boolean mForcedUpdate; /**
* 解析数据
* @param jsonStr
* @return true,解析成功;false解析失败
*/
public boolean parse(String jsonStr){
JSONObject json = convertStrToJSON(jsonStr);
return parse(json);
} public boolean parse(JSONObject json){
if(json == null){
return false;
} boolean needReflesh = json.optBoolean(Constants.NEED_UPDATE);
String serverVersion = json.optString(Constants.VERSION);
String mDownLoadUrl = json.optString(Constants.DOWNLOAD_URL);
int mforceUpdate = json.optInt(Constants.FORCED_UPDATAE); //强制更新,0:否,1:是 this.mNeedUpdate = needReflesh;
this.mVersion = serverVersion;
this.mDownloadUrl = mDownLoadUrl;
this.mForcedUpdate = mforceUpdate == 1?true:false; return true;
} public JSONObject convertStrToJSON(String json){
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
}catch (JSONException e){
e.printStackTrace();
} return jsonObject;
}
}

组合:

NetData<PlugUpdateInfo> baseData = new NetData<PlugUpdateInfo>();
baseData.parseHead(result); if(baseData.isCodeOk()){
JSONObject jsonBody = baseData.getJSONBody(result); PlugUpdateInfo data = new PlugUpdateInfo();
boolean success = data.parse(jsonBody);
if(success){
if(listener != null){
listener.onRequestDataSuccess(data);
}
}else{
if(listener != null){
listener.onRequestDataFailed(-1, "");
}
}
}else{
if(listener != null){
listener.onRequestDataFailed(baseData.code, baseData.msg);
}
}

学习网络请求返回json对应的model的更多相关文章

  1. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  2. 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法

    在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...

  3. shiro异步请求返回JSON响应

    shiro异步请求返回JSON响应 需求1:当shiro请求资源,但是没有进行认证时,默认是进行重定向,现在需要返回JSON响应.注意异步请求,服务器重定向后,ajax拿到的是浏览器重定向后的到的页面 ...

  4. AJAX请求,返回json进行页面绑值

    AJAX请求,返回json进行页面绑值 后台 controller @RequestMapping(value = "backjson.do",method=RequestMeth ...

  5. Flutter网络请求与JSON解析

    本文介绍如何在Flutter中创建HTTP网络请求和对请求的json string进行类型解析. 网络请求 官方使用的是用dart io中的HttpClient发起的请求,但HttpClient本身功 ...

  6. C#网络请求与JSON解析

    最新学校的海康摄像头集控平台(网页端)不能在win10里登录,我寻思着拿海康的c# demo直接改. 首先得解决权限问题,每个教师任教不同年级,只能看到自己所在年级的设备,涉及到登录,在此记录一下C# ...

  7. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  8. spring 4.x下让http请求返回json串

    当前很多应用已经开始将响应返回为json串,所以基于springframework框架开发的服务端程序,让响应返回json字符串成为了一种常用手段. 这里介绍一下如何在spring-MVC框架下方便快 ...

  9. ajax请求返回json字符串/json对象 处理

    1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: Prin ...

随机推荐

  1. Java—数组和方法

    数组 声明数组 数组类型[] 数组名;or 数据类型 数组名[]; 如:int[] scores; 分配空间 数组名 = new 数据类型[数组长度];如:scores = new int[5]; 以 ...

  2. Java -GUI开发九九乘法表

    Java GUI开发九九乘法表 (1)实现目标: 利用java自带的awt包,基础控件开发一个九九乘法表,点击可以显示对应的乘法口诀. (2)控件选择: 点击——Button 显示——TextFiel ...

  3. vos忙时闲时费率不一样怎么设置

    问题: 现有一客户要求上午闲时由原来的9:00追加到9:30 即: 9:30——12:00为忙时 14:00——18:00为忙时 其他为闲时 忙时费率为0.04元即4分 闲时费率为0.025元即2分5 ...

  4. 关于java@Override错误

    重写的接口的方法,编译的时候一直报@override is not override a method from superclass,查了一下资料,这个@override报错是因为版本的原因. 在J ...

  5. ubuntu16.4安装 VirtualBox

    1) 从oracle官网下载virtual box安装包 2) 安装支持包 sudo apt-get install libqt5x11extras5 libsdl1.2debian 3) sudo ...

  6. express不是内部命令

    有时用npm install express -g安装完express时,在写express -v会显示express不是内部命令 这样的话如果自己的安装没有问题的话就要考虑到环境变量了 win7 P ...

  7. java调用dll库

    1.dll叫动态链接库,作用是用某种语言封装好某些函数生成可供不同语言调用的.dll文件,通常是用C++编写生成,因为C++可以对很多硬件操作方便而其他高级语言不行 2.dll生成参考:http:// ...

  8. Vue--父组件传数据给子组件,子组件生命周期过程拿到数据的情况

    需求: 在子组件渲染之前,我要修改数据的某个字段 结果是 组件在beforeUpdate,updated 的状态才能拿到父组件的数据 那么证明,我根本无法在beforeUpdate,updated两个 ...

  9. IOS TableView代理设置 table的行高

    // 设置行高(每一行的高度一致) self.tableView.rowHeight = ; self.tableView.delegate = self; #pragma mark - 代理方法 / ...

  10. 字符串查找算法的改进-hash查找算法

    字符串查找即为特征查找: 特征即位hash: 1.将待查找的字符串hash: 2.在容器字符串中找头字符匹配的字符串,并进行hash: 3.比较hash的结果:相同即位匹配: hash算法的设计为其中 ...