我是靠谱客的博主 仁爱电源,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部