我是靠谱客的博主 仁爱电源,最近开发中收集的这篇文章主要介绍okhttp简单封装NetworkManager管理客户端网络请求BaseRequest 请求对象具体ChileRequest,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
NetworkManager管理客户端网络请求
- 1.初始化OkHttpClient对象,配置请求相关设置。
- 2.使用根据url和参数创建Request对象。
3.使用OkHttpClient.newCall,传入Request对象,创建call对象,并执行同步或者异步请求。
/** * NetworkManager 持有一个OkHttpClient对象来发送网络请求,处理网络结果的线程的切换 * */ public class NetworkManager { public static final String TAG = "NetworkManager"; public static NetworkManager sNetworkManager; private Handler mHandler = new Handler(Looper.getMainLooper()); private NetworkManager() { mOkHttpClient = new OkHttpClient(); } private OkHttpClient mOkHttpClient; public static NetworkManager getInstance() { if (sNetworkManager == null) { synchronized (NetworkManager.class) { if (sNetworkManager == null) { sNetworkManager = new NetworkManager(); } } } return sNetworkManager; } public void sendRequest(final BaseRequest baseRequest) { final Request request = new Request.Builder().url(baseRequest.getUrl()).get().build(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { mHandler.post(new Runnable() { @Override public void run() { baseRequest.getNetworkListener().onFailed(e.getLocalizedMessage()); } }); } @Override public void onResponse(Call call, Response response) throws IOException { //解析结果在在子线程做 final Object o = baseRequest.parseNetworkResponse(response.body().string()); //回调网络请求成功,传入解析后的结果 mHandler.post(new Runnable() { @Override public void run() { baseRequest.getNetworkListener().onSuccess(o); } }); } }); }}
BaseRequest 请求对象
- 1.所有的Request都有url、参数和callback,在BaseRequest中定义。
- 2.执行网络请求获得network对象的请求方法,将this传入。
3.可以解析响应对象,通过Gson和泛型。
/** * 包含一个请求所需必要的信息url, 调用NetworkManager发送请求,解析网络结果,解析发送请求时想要的java bean * 还可以提供回调方法 * @param <T> */ public class BaseRequest<T> { public static final String TAG = "BaseRequest"; public static final int DEFAULT_PAGE_SIZE = 10; private String mUrl; private NetworkListener mNetworkListener; private Gson mGson; public String getUrl() { return mUrl; } public void setUrl(String url) { mUrl = url; } public NetworkListener getNetworkListener() { return mNetworkListener; } public void setNetworkListener(NetworkListener networkListener) { mNetworkListener = networkListener; } public BaseRequest(String url, NetworkListener listener) { mUrl = url; mNetworkListener = listener; mGson = new Gson(); } public void execute() { NetworkManager.getInstance().sendRequest(this); } /** * 解析网络结果,解析发送请求时想要的java bean * @param string * @return */ public T parseNetworkResponse(String string) { Class classz = getClass(); Type genericSuperclass = classz.getGenericSuperclass(); ParameterizedType parameterized = (ParameterizedType) genericSuperclass; return mGson.fromJson(string, parameterized.getActualTypeArguments()[0]); } <------------------------> public interface NetworkListener<T> { void onFailed(String s); /** * 回调解析后的结果 * @param result */ void onSuccess(T result); } }
具体ChileRequest
- 1.继承BaseRequest
- 2.只需要闯入自己请求的参数,设置请求的url
3.将请求信息传递给BaseRequest
public class HomeRequest extends BaseRequest<List<HomeListItemBean>> { public static final String TAG = "HomeRequest"; public HomeRequest(String url, NetworkListener listener) { super(url, listener); } public static HomeRequest getHomeRequest(int offset, NetworkListener listener) { return new HomeRequest(URLProviderUtils.getHomeUrl(offset, DEFAULT_PAGE_SIZE), listener); } }
最后
以上就是仁爱电源为你收集整理的okhttp简单封装NetworkManager管理客户端网络请求BaseRequest 请求对象具体ChileRequest的全部内容,希望文章能够帮你解决okhttp简单封装NetworkManager管理客户端网络请求BaseRequest 请求对象具体ChileRequest所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复