关于Retrofit+rxjava的使用

大家好:针对retrofit+rxjava的整合。博主本人进行在设计过程中进行的是一个基础的架构的封装。跟大家分享下并继续改善。

首先。大家都知道Retrofit是一个代理okhttp的网络代理 ,首先针对retrofit简单用法。

public class RetrofitApi {

    private RetrofitService retrofitService;
    private static RetrofitApi retrofitApi;

    public static RetrofitApi getInstence() {
        if (retrofitApi == null) {
            synchronized (RetrofitApi.class) {
                if (retrofitApi == null) {
                    retrofitApi = new RetrofitApi();
                }
            }
        }
        return retrofitApi;
    }

    /**
     * 封装getRetrofitService 进行http请求代理
     */
    public RetrofitService getRetrofitService(Context context) {
        OkHttpClient client = new OkHttpClient.Builder()
                //添加应用拦截器
                .addInterceptor(new HttpInterceptor(context))
                .build();
        if (retrofitService == null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Api.BASE_URL)
                    .client(client)
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            retrofitService = retrofit.create(RetrofitService.class);
        }
        return retrofitService;
    }
}

以上是最基本的一个请求封装,那么我们如何用呢?下面且看:

private void getUser() {

        hallPresent.getUserInfo(new HomeView.userinfo() {
            @Override
            public void getinfo(String p) {
                UserBackBean.DataBean dataBean = new Gson().fromJson(p, UserBackBean.DataBean.class);
                tv_user_nick.setText(dataBean.getNickName());
                Glide.with(getActivity()).load(dataBean.getAvatar()).placeholder(R.drawable.headimage).into(iv_my_head);
                tv_balance.setText(Double.valueOf(dataBean.getBalanceAmt()).intValue() + "");

            }
        });

    }

那么getUserInfo中代码是如何进行请求呢.别急,你看:

 public void getUserInfo(HomeView.userinfo infoview) {
        handleRequest(RetrofitApi.getInstence().getRetrofitService(activity).getUserInfo(), new MyObserver(activity) {
            @Override
            public void getData(String json) {
                infoview.getinfo(json);

            }
        });
    }

.是的,这样就完成了请求了。那么这个handleRequest是啥呢,点进去看一下就明白啦!

  public static <T> void handleRequest(Observable<T> observable, Observer<T> observer) {
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

哈哈,没错就是针对Rxjava进行了线程的切换以及Observable对象,那么啥是Observable对象呢 。

  @POST("/v1/user/register")
    Observable<RegisterBean> toRegister(@QueryMap Map<String, String> map);

咋一看.是不是就明白了呢 。


你可能感兴趣的:(移动开发,网络框架)