学习网络请求返回json对应的model
原来泛型可以这样用:
网络返回基类,返回一个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的更多相关文章
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法
在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...
- shiro异步请求返回JSON响应
shiro异步请求返回JSON响应 需求1:当shiro请求资源,但是没有进行认证时,默认是进行重定向,现在需要返回JSON响应.注意异步请求,服务器重定向后,ajax拿到的是浏览器重定向后的到的页面 ...
- AJAX请求,返回json进行页面绑值
AJAX请求,返回json进行页面绑值 后台 controller @RequestMapping(value = "backjson.do",method=RequestMeth ...
- Flutter网络请求与JSON解析
本文介绍如何在Flutter中创建HTTP网络请求和对请求的json string进行类型解析. 网络请求 官方使用的是用dart io中的HttpClient发起的请求,但HttpClient本身功 ...
- C#网络请求与JSON解析
最新学校的海康摄像头集控平台(网页端)不能在win10里登录,我寻思着拿海康的c# demo直接改. 首先得解决权限问题,每个教师任教不同年级,只能看到自己所在年级的设备,涉及到登录,在此记录一下C# ...
- iOS 自己封装的网络请求,json解析的类
基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...
- spring 4.x下让http请求返回json串
当前很多应用已经开始将响应返回为json串,所以基于springframework框架开发的服务端程序,让响应返回json字符串成为了一种常用手段. 这里介绍一下如何在spring-MVC框架下方便快 ...
- ajax请求返回json字符串/json对象 处理
1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: Prin ...
随机推荐
- centos7按报错dracut
在Windows下,将从CentOS官网上下载的CentOS7镜像文件,用UltrISO以硬盘镜像方法写入U盘 安装过程中出现下面错误: dracut-initqueue[624]:Warning: ...
- django定时任务小插件
需求 每天请求一封邮件,并读取该邮件 这个其实可以使用linux 自带了crontab实现,但是毕竟是django 开发.想着不知道有没有方法可以从django 中实现. 简单搜索了下,这方面的方法确 ...
- selenium代理
selenium.KeyDown("id=ctaskName", "d"); selenium.KeyPress("id=cta ...
- COGS 2075. [ZLXOI2015][异次元圣战III]ZLX的陨落
★★☆ 输入文件:ThefallingofZLX.in 输出文件:ThefallingofZLX.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 正当革命如火如 ...
- C语言中的特殊变量
auto: 函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间. register: 为了提高效率,C语言允许 ...
- replace into 浅析
转载自:http://blog.itpub.net/22664653/viewspace-1669734/ http://blog.itpub.net/22664653/viewspace-16701 ...
- hdu-2688 Rotate---树状数组+模拟
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2688 题目大意: 给你n数,(n<=3e6),有两个操作,Q为 当前有多少对数,满足严格递增, ...
- 使用ssl模块配置同时支持http和https并存
博客已经迁移,请访问: https://www.helingfeng.com
- Extjs4.2 tabPosition left 相关
解决tabPosition:left 标签的方向问题 <%@ page language="java" import="java.util.*" pa ...
- tomcat.apache startup.bat闪退两种解决方法
tomcat bin文件夹中的startup.bat闪退原因及解决方法两种 方法一:在启动tomcat时闪退,重新检查java的jre运行环境.如果环境变量忘记配置一定会导致了tomcat的闪退. 追 ...