远离过度设计:Android项目最适用的架构


 前段时间看了几篇MVP在android上的应用,大多数的思路都是一样的。MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,通过Presenter来处理MV之间的关系。但是同样的这么做也会导致很多重复的代码,迭代容易写起来真是恼火不解释。

不喜欢这种设计,但是想法总是要有的,于是我这样做了;

我们通常情况下的一个带有列表的界面(listview,gridview,recyclerview,xxView)但凡是需要从网络加载数据的都有以下几个特点:

1.URL(api地址)

2.Params(参数)

3.回调

我们的Activity往往都只需要接受或者传入这些值来控制

    @Override
    public String getApiUrl() {
        return url;
    }

    @Override
    public RequestParams getParams() {
        return params;
    }

    @Override
    public Class getClazz() {
     
    }

    @Override
    public void Onsuccess(Object o) {
       
    }

    @Override
    public void Onfailure(String msg) {
        T.showShort(this, msg);
    }

在Acvtivity中,我只需要这几个方法就可以搞定,开一个BaseListActivity在里边实现网络访问就可以了,之后的activity完全不用管这个list中如何去获取数据的,接受的永远只是一个对象而已。


实例:

public abstract class BaseListActivity<T> extends BaseActivity implements HttpRequstParams<T> {

    private RequestQueue mRequestQueue;
    private static final String HTTP_TAG = "tag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRequestQueue = Volley.newRequestQueue(this);
        LoadingData();
    }

    /**
     * 获取列表
     */
    private void LoadingData() {
        StringRequest request = new StringRequest(Request.Method.POST, getApiUrl(), new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Gson gson = new Gson();
                T t = (T) gson.fromJson(response,getClazz());
                Onsuccess(t);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Onfailure("获取数据失败");
            }
        });
        request.setRequestParams(getParams());
        request.setTag(HTTP_TAG);
        mRequestQueue.add(request);
    }

    /**
     * 结束网络访问请求
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mRequestQueue.cancelAll(HTTP_TAG);
    }
}

public interface HttpRequstParams<T> {

    /**
     * 获取网络访问的地址
     *
     * @return
     */
    String getApiUrl();

    /**
     * 获取参数
     *
     * @return
     */
    RequestParams getParams();

    /**
     * 获取字节码
     *
     * @return
     */
    Class getClazz();

    /**
     * 成功
     **/
    void  Onsuccess(T t);

    /**
     * 失败
     **/
    void Onfailure(String msg);

}

public class TestActivity extends BaseListActivity {

    @InjectView(R.id.listView)
    ListView listView;
 
    @Override
    protected void initLayoutAndView() {
        setContentView(R.layout.activity_app_store);
    }

    @Override
    protected void addListener() {

    }

    @Override
    public String getApiUrl() {
        return API.APP.APPLIST;
    }

    @Override
    public RequestParams getParams() {
        RequestParams params = new RequestParams();
        params.addBodyParameter("", "");
		.....
        return params;
    }

    @Override
    public Class getClazz() {
        return xx.class;
    }

    @Override
    public void Onsuccess(Object o) {
			
    }

    @Override
    public void Onfailure(String msg) {
        T.showShort(this, msg);
    }
}



这种方式配合快速adapter使用,代码就这么多。轻松加愉快吧!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值