rxandroid结合retrofit2发送post请求

本文介绍了如何在Android中结合retrofit2和RxAndroid进行POST网络请求。通过配置gradle,定义请求接口,以及利用异步方式在主线程调用,实现简单网络请求。在retrofit2正式版中,已经解决了与RxAndroid结合时的兼容问题,现在可以返回Observable进行订阅操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日retrofit2正式版发布,终于可以愉快的使用retrofit2了。retrofit2是一个android http通讯框架,内部集成了okhttp。RxJava是一个异步执行框架,采用的是发布订阅模式。使用起来可以让代码更简洁。本文将介绍retrofit2 post的使用方法和集成RxAndroid的retrofit2 post方式的使用。

具体原理不多说,下面讲下使用流程吧。


1.配置gradle

    //retrofit2相关依赖
    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
    //rxandroid相关依赖
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'io.reactivex:rxjava:1.1.0'

2.定义请求的service接口,举个例子

public interface RestApi {
    @FormUrlEncoded
    @POST("User/login")
    Call<BaseBean> login(@Field("mobile") String mobile, @Field("password") String password);
}

3.发送网络请求,用异步方式,可直接在主线程调用


private void sendPost() {
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build();
        Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl("http://baidu.test/Api/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        RestApi restApi = retrofit.create(RestApi.class);
        Call<BaseBean> callBack = restApi.login("13812345678", "11111");
        callBack.enqueue(new Callback<BaseBean>() {
            @Override
            public void onResponse(Call<BaseBean> call, Response<BaseBean> response) {
                try {
                    Log.d("onResponse ", response.body().getMessage());

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(Call<BaseBean> call, Throwable t) {
                Log.d("onFailure ", "onFailure");
            }
        });
    }


这样,一个简易的使用retrofit2发送网络请求就完成了。

4.下面结合RxAndroid调用retrofit2。当retrofit2还带beta版本的时候,与RxAndroid结合使用似乎有些问题,RxJavaCallAdapterFactory实现的是retrofit老版的CallAdapter.Factory,所以不能使用。retrofit2的正式版已经没这个问题了。

首先还是定义一个service接口,与上面的不同,这个返回的是个Observable。

public interface RxApi {
    @FormUrlEncoded
    @POST("User/login")
    Observable<BaseBean> login(@Field("mobile") String mobile, @Field("ccid") String ccid, @Field("password") String password);
}
        用Rx的方式调用接口 
 

    private void rxRetrofit() {
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build();

        Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl("http://baidu.test/Api/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        RxApi restApi = retrofit.create(RxApi.class);
        Observable<BaseBean> observable = restApi.login("13812345678", "11111");

        observable.observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<BaseBean>() {
                    @Override
                    public void onCompleted() {
                        Log.d("onCompleted", "****************");
                    }

                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace();
                        Log.d("onError", "****************" + e.getMessage());
                    }

                    @Override
                    public void onNext(BaseBean baseBean) {
                        Log.d("onNext", "****************");
                        
                    }
                });

    }
     
单独使用retrofit2和结合Rx使用的方法就讲完了。想详细了解Retrofit2和RxAndroid的可以参考下面两篇文章。
Retrofit 2.0:有史以来最大的改进
 给 Android 开发者的 RxJava 详解

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值