安卓开发 第三篇 我的安卓应用架构设计-----Responce类

我的项目中使用了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 Userprivate 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值