原来泛型可以这样用:

网络返回基类,返回一个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. Prestashop-1.6.1.6-zh_CN (Openlogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: prestashop1.6.1.6 commercial content management ecommerce open-source 简体中文 ...

  2. python_opencv应用系列1:图片读写

    opencv的读写非常简单,主要用到的就是imread和imwrite两个函数 读取图片示例 import cv2 #imread(filename[, flags]) -> retval im ...

  3. react+webpack 引入字体图标

    在使用react+webpack 构建项目过程中免不了要用到字体图标,在引入过程中报错,不能识别字体图标文件中的@符,报错 Uncaught Error: Module parse failed: U ...

  4. Linux 使用第三方邮箱发邮件的设置

    mail命令在Ubuntu下是需要安装的,使用下条命令进行安装: sudo apt-get install heirloom-mailx 在CentOS 下安装则是: yum install mail ...

  5. Metasploitable渗透测试实战——生成木马

    攻击机:kali 目标机:windows 1.生成木马  wincap发送至本机 2.进入msf  (命令:msfconsole)启动监听 3.当目标点击test.exe(可伪装)时,触发后门,实现入 ...

  6. C#中RichTextBox字体不统一(中英文)

    this.richTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F);// new System.Drawing.Font(& ...

  7. 解决频繁自动弹出“QQ拼音升级程序”,可使用旧版QQ输入法

    QQ输入法(2017年9月6日版本)下载地址: http://dlc2.pconline.com.cn/filedown_90891_8506339/BZXMP3fp/QQPinyin_Setup_5 ...

  8. Poj(1125),Floyd,

    题目链接:http://poj.org/problem?id=1125 多源点最短路中的,最长路的,最短路. 看到这里就懵逼了,解释一下,找到一个源点,使得路最短,(遍历源点),路最短怎么求呢? 就是 ...

  9. maven没有servlet(创建servlet后报错)

    maven不能创建servlet 解决方案 方案一 在项目的iml进行指定根目录 <sourceRoots> <root url="file://$MODULE_DIR$/ ...

  10. cudpp库使用说明

    所有信息是我个人在使用过程中的小小经验,不是什么权威性文档,旨在帮助需要研究此类信息的朋友少走点弯路. 整个项目的主函数,一切从这里开始 在cudpp_testrig右键属性页里找到调试,在命令行里输 ...