我是靠谱客的博主 仁爱电源,这篇文章主要介绍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
    10
    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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部