网络框架的封装使用

一般在设计app使用的过程中,都是会涉及到调用系统接口的网络请求。这篇文章主要是为了介绍http的相关请求封装。由于使用的是比较陈旧的框架,所以使用的资源可能会相对来说是比较老套的。但是核心的思想基本上是差不多的。

材料:

有些人可能很奇怪这些jar到底是怎么鬼出来的?目前安卓系统自带了okhttp这套代码的逻辑了。想看这个模块的源码:

http://androidxref.com/

具体的代码可以在这个里面去阅读,

使用它的方法是可以封装成一个类:RequestManager

它的一个核心的设计就是:

public class RequestManager {
    private static RequestManager mInstance;
    private OkHttpClient okHttpClient;
    private RequestManager(Context context) {
        okHttpClient = new OkHttpClient();
        okHttpClient.setConnectTimeout(12, TimeUnit.SECONDS);
        mDelivery = new Handler(Looper.getMainLooper());//Looper.getMainLooper()就表示放到主UI线程去处理
        }
public static RequestManager getInstance(Context mContext) {
    if (mInstance == null) {
        synchronized (RequestManager.class) {
            if (mInstance == null) {
                mInstance = new RequestManager(mContext);
            }
        }
    }
    return mInstance;
}
    public void request(final Map<String, String> par, String url, final RequestListener requestListener) {
        String mUrl;
        final Request request = new Request.Builder()
                .url(mUrl)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {  
            @Override                 
            public void onFailure(Request request, IOException e) {
                mDelivery.post(new Runnable() {
                    @Override
                    public void run() {
                        requestListener.onFailure("请求失败");
                    }
                });
            }

            @Override
            public void onResponse(Response response) throws IOException {
                final String result = response.body().string();
                mDelivery.post(new Runnable() {
                    @Override
                    public void run() {
                       //做一些回掉相关的操作
                       requestListener.onResponse(result);
                            
                    }
                });
            }
        });
    }

    public interface RequestListener {
        void onResponse(String result);

        void onFailure(String error);
    } 
}

到此为止了一个基本的数据请求框架就封装完成了,当然肯定还有一些别的特殊的操作,在这里并没有做。大体在这个基础上去修改就可以了。它的整个代码的核心就是:call.enqueue,这个是原生使用里面的东西。调用的就是:interface里面定义的两类方法。因此在使用的时候变得很简单:RequestManager.getInstance().request(map,url,new RequestListener{

void onResponse(String result){

}

void onFailure(String error){

}

});

//在这个里面做成功或者失败的逻辑。

那么现在有一个问题?为什么要这样设计?

实际上作为在编程的过程中,我们不需要每次去繁琐的写call.enqueue,我们只需要去处理,请求成功和失败我们自己要做的事情。

比如我们经常使用的:

 Handler mhandler=new Handler(){

  void handleMessage(Message  wht){

 }

}

看看源码里面是怎么完成这个动作的:

那么我们知道经常走dispatchMessage()

   那么重点就来到了handleMessage这个方法:

这个是一个空方法,因为这个正式我们要自己处理的逻辑。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值