网络框架的封装使用
作者:互联网
一般在设计app使用的过程中,都是会涉及到调用系统接口的网络请求。这篇文章主要是为了介绍http的相关请求封装。由于使用的是比较陈旧的框架,所以使用的资源可能会相对来说是比较老套的。但是核心的思想基本上是差不多的。
材料:
有些人可能很奇怪这些jar到底是怎么鬼出来的?目前安卓系统自带了okhttp这套代码的逻辑了。想看这个模块的源码:
具体的代码可以在这个里面去阅读,
使用它的方法是可以封装成一个类: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这个方法:
这个是一个空方法,因为这个正式我们要自己处理的逻辑。
标签:封装,String,框架,void,网络,RequestManager,new,public,mInstance 来源: https://blog.csdn.net/kingmasterlife/article/details/100306677