我是靠谱客的博主 仁爱电源,这篇文章主要介绍okhttp简单封装NetworkManager管理客户端网络请求BaseRequest 请求对象具体ChileRequest,现在分享给大家,希望可以做个参考。
NetworkManager管理客户端网络请求
- 1.初始化OkHttpClient对象,配置请求相关设置。
- 2.使用根据url和参数创建Request对象。
3.使用OkHttpClient.newCall,传入Request对象,创建call对象,并执行同步或者异步请求。
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48/** * 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和泛型。
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53/** * 包含一个请求所需必要的信息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
复制代码1
2
3
4
5
6
7
8
9
10public 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复