我的项目中使用了model和Responce来保存数据,Responce是服务器返回的我们需要的数据的封装,得到服务器返回的数据后我们需要转换成自己本地的模型类(model)。
例如,服务器返回:
{
"status":1000,
"msg":"succeed",
"requestTime":1460855439,
"responceTime":1460855483,
"data":{"name": "BeJson",
"url": "http://www.bejson.com",
"page": 88,
"isNonProfit": true,
"address": "科技园路,江苏苏州,中国"
}
}
先写一个类来处理请求状态信息:
public class BaseResponce<T>{
private int status;
private String msg;
private int requestTime;
private int responceTime;
private T data;
public void setStatus(int status){
this.status = status;
}
public int getStatus(){
return this.status;
}
public void setMsg(String msg){
this.msg = msg;
}
public String getMsg(){
return this.msg;
}
public void setRequestTime(int requestTime){
this.requestTime = requestTime;
}
public int getRequestTime(){
return this.requestTime;
}
public void setResponceTime(int responceTime){
this.responceTime = responceTime;
}
public int getResponceTime(){
return this.responceTime;
}
public void setData(T data){
this.data = data;
}
public T getData(){
return this.data;
}
}
然后Responce类就这样写:(data部分)
public class Responce{
private String name;
private String url;
private int page;
private boolean isNonProfit;
private String address;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setUrl(String url){
this.url = url;
}
public String getUrl(){
return this.url;
}
public void setPage(int page){
this.page = page;
}
public int getPage(){
return this.page;
}
public void setIsNonProfit(boolean isNonProfit){
this.isNonProfit = isNonProfit;
}
public boolean getIsNonProfit(){
return this.isNonProfit;
}
public void setAddress(String address){
this.address = address;
}
public String getAddress(){
return this.address;
}
}
有时候也会这样写:(data部分)(据说不用setter和getter,访问速度会提升3倍)
public class Responce{
public String name;
public String url;
public int page;
public boolean isNonProfit;
public String address;
}
我们解析json,然后得到的就是一个 BaseResponce 对象。
BaseResponce<Responce> responce=new Gson().fromJson(str,new TypeToken<BaseResponce<Responce>>(){}.getType());
就这样,我们的Responce类就创建好了,我们可能需要将数据转化成自己的model,比如(model 类为User)
//我们的model类User
public class User{
private int id;
private String name;
private long phone;
private int age;
private String address;
private String mainPage;
public void setId(int id){
this.id = id;
}
public int getId(){
return this.id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setPhone(long phone){
this.phone = phone;
}
public long getPhone(){
return this.phone;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setAddress(String address){
this.address = address;
}
public String getAddress(){
return this.address;
}
public void setMainPage(String mainPage){
this.mainPage = mainPage;
}
public String getMainPage(){
return this.mainPage;
}
}
//然后Responce类
public static class Responce{
public String name;
public String url;
public int page;
public boolean isNonProfit;
public String address;
public User wrapper(){ //转化成自己的model
User user=new User();
usr.setName(name);
user.setAdress(adress);
user.setMainPage(page);
return User;
}
}
如此我们可以得到 User:
User user=responce.getData().wrapper();
我这里使用Responce主要是为了应对服务器返回的数据比较杂乱,不是以对象的形式返回的(实在是记忆深刻啊,坑怕了),如果服务器返回的数据很规范,是以对象的格式返回的,你也可以直接使用你的model类接收,如:
BaseResponce<User> responce=new Gson().fromJson(str,new TypeToken<BaseResponce<User>>(){}.getType());
User user=responce.getData();
这样的好处是可以隔离,和解耦服务器返回的字段,试想一下,有个后台小伙伴,开始使用了一些字段表示一些数据,然后业务变化,要在这个返回结果中添加一些新的字段,小伙伴发现有些字段的语义跟要添加的字段冲突了,想也不想,就把原来的字段给改了,如果没有Response来隔离,我去我代码都写好了,你给我改数据,快改回去,小伙伴说都改完了,忘了原来用的哪些字段了。。。(扯皮)
是不是很简单,好了,就写到这里吧。
如果有更深的理解,本文将会修改;
如果有错误的地方,欢迎指正;
如果你有更好的理解,欢迎交流。
本文为原创文章,版权归博主所有,转载请注明出处。
更多资料:
我的github地址以及使用demo: https://github.com/naivor/naivorapp