原来泛型可以这样用:

网络返回基类,返回一个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. Lubuntu , ubuntu 搜索文件

    使用命令行方式搜索 $ locate your_filename

  2. SQL-有关数据库的提问

    各位大侠,小弟初来乍到,对sql , pl/sql ,t/sql概念比较模糊,有以下几个问题希望能帮我解答: 1:plsql到底是语言还是工具?我看到有人说oracle的存储过程是拿plsql写的,那 ...

  3. framework7 可以拉动右侧工具栏和点击当前item就可以出发事件的HTML结构

    <li class="swipeout"> <div class="swipeout-content item-content"> &l ...

  4. 2017.10.25 Java List /ArrayList 三种遍历方法

    java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...

  5. mysql随机字符串函数

    drop function if exists rand_str; delimiter $$ ) charset 'utf8' begin # 定义接收初始化类型 ) ; # 定义初始化数字 ) '; ...

  6. Laravel 5 : Call to undefined function Illuminate\Foundation\Bootstrap\mb_internal_encoding()

    自己组装的apache,php,mysql phpinfo显示 OpenSSL support     disabled (install ext/openssl) 判断为权限问题,所以修改如下. 1 ...

  7. node.js启动调试方式

    node.js启动调试方式(nodeJs不能像js一样在控制台调试) 以express项目为例,启动路径是localhost:3000 一.通过node命令启动 node server/bin/www ...

  8. 1.Spring Cloud初相识--------简单项目搭建

    开发工具:STS 代码下载链接:GitHub管理项目 前言: Springcloud 算是当前比较火的技术,一套微服务架构的技术. 我个人对微服务的理解为: 服务可以代表service,微服务就是小的 ...

  9. 写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景

    前言 本着实践为主的原则,此系列文章不做过多的概念性的阐述和讨论;更多的代码和篇幅用来展示MVC和MVVC下的基础代码结构与具体实现,来展示各自优劣.这篇文章,更多的在于发掘MVC与MVVC的共性,以 ...

  10. SQL递归查询实现组织机构树

    系统用到的组织机构树,要实现对当前节点以及其子节点的查询,数据库SQL要用到递归查询,这也是我第一次接触SQL的递归查询. 先说一下什么是递归查询,简单说来是将一个树状结构存储在一张表里,比如一个表中 ...