RxJava 从入门到实践(六:框架之Retrofit)

本文介绍如何将Retrofit与RxJava结合使用进行网络请求处理。首先展示了Retrofit的基本概念及配置方法,并通过示例代码说明了普通写法与RxJava结合后的写法区别。此外,还详细介绍了依赖项的添加。

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

一.Retrofit的概念
Retrofit 是 Square 公司开发的,面向Android和Java的,一个类型安全的网络请求客户端。

通过注解的方式,设置请求类型;如:@POST("")

二. Retrofit的基本使用
  <1>Retrofit retrofit = new Retrofit.Builder()    
                            ....build();                            // Retrofit初始化

  <2>public interface GitHub {                      // 订阅请求接口   

        @(GET“”)                                            // 注释描述请求类型  

        Call<List<String>> getDatas()                     

      }

<3>

Call<List<String>> call = retrofit.create(GitHub.class). getDatas(“param1”, “param2”);    // 调用接口,重写回调方法

 三:实例

首先导入依赖

    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.2.1'

    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

<1>Retrofit的普通写法

 private  void testRetrofit(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        Call<List<String>> call = retrofit.create(GitHub.class).itemDatas("zhangkekekeke", "RxJavaObserver");

        call.enqueue(new Callback<List<String>>() {
            @Override
            public void onResponse(Call<List<String>> call, Response<List<String>> response) {
                Observable.from(response.body())
                        .subscribe(new Action1<String>() {
                            @Override
                            public void call(String s) {
                                Log.d("RxJava_R", s + ")");
                            }
                        });
            }

            @Override
            public void onFailure(Call<List<String>> call, Throwable t) {
                Log.d(TAG, t.getMessage());
            }
        });

    }

    public interface GitHub {
        @GET("/{owner}/{txt}/master/jsondata")
        Call<List<String>> itemDatas(
                @Path("owner") String owner,
                @Path("txt") String repo
        );
    }

<2>RxJava+Retrofit 组合写法

 

public class RetrofitActivity extends RxAppCompatActivity {
    public static final String API_URL = "https://raw.githubusercontent.com/";
    private Retrofit retrofit;
    private Subscription subscription;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_retrofit);
        //初始化Retrofit
        retrofit = new Retrofit.Builder()
                .baseUrl(API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        //发送请求,返回数据的Observable
        subscription = retrofit.create(GetGithub.class)
                .itemDatas("zhangkekekeke", "RxJavaObserver")
                .subscribeOn(Schedulers.io())
                .flatMap(strings -> Observable.from(strings))
                .subscribe(s -> {
                    Log.d("RxJava_R", s);
                });
    }

    //定义请求接口
    public interface GetGithub {
        @GET("/{owner}/{txt}/master/jsondata")
        Observable<List<String>> itemDatas(
                @Path("owner") String owner,
                @Path("txt") String repo);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消订阅~
        if (subscription != null) {
            subscription.unsubscribe();
            subscription = null;
        }
    }
}

 




  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值