美学原理Android:Retrofit 结合 中华VxJava的优雅使用(含实例教程)

迎接关心Carson_Ho的简书!

不定期分享有关安卓开发的干货,追求短、平、快,但却不缺深度

4.4 测试结果

示意图

前言

  • Andrroid支出中,网络请求拾分常用,而在Android互连网请求库中,Retrofit是即时最热的3个网络请求库

Github截图

  • Retrofit于是作为当今最盛行的网络请求库,其中3个重大原因是:支持RxJavaRxjava由于其依据事件流的链式调用、逻辑简洁
    & 使用简单
    的特色,深受各大 Android开发者的欢迎。

Github截图

  • 今日,作者将为我们带来 Retrofit
    结合Rxjava其举行使案例教学,即科普开发应用场景落成
    ,希望大家会欣赏。

正文紧要基于Retrofit 2.0 & Rxjava 2.0

  1. 本体系文章紧要根据 Rxjava 2.0
  2. 接下去的年月,自家将不止生产 AndroidRxjava 2.0
    的一多级文章,包括原理、操作符、应用场景、背压等等

    ,有趣味可以接二连三关心Carson_Ho的安卓开发笔记!!

示意图


2. RxJava简介

示意图

关于RxJava的愈来愈详实介绍请看小说:Android 昂科威xjava:那是一篇 清晰 &
易懂的Tucsonxjava 入门教程


5.1 互连网请求轮询(无条件)

  • 须求意况表达

示意图



5.5 合并数据源 & 统一突显

  • 急需情形

示意图

至此,关于Retrofit & RxJava的莫过于支出须求意况讲解截至。


手续3:创造 用于描述网络请求 的接口

采用 注解 + Observable<...>接口描述 网络请求参数

GetRequest_Interface.java

public interface GetRequest_Interface {

    @GET("ajax.php?a=fy&f=auto&t=auto&w=hi%20world")
    Observable<Translation> getCall();
     // 注解里传入 网络请求 的部分URL地址
    // Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里
    // 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略
    // 采用Observable<...>接口 
    // getCall()是接受网络请求数据的方法
}

b. 网络请求的包裹格局 & 发送格局各异

<-- 传统方式 ->>
        // 1. 创建 网络请求接口 的实例
        GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

        // 2. 采用Call<..>接口 对 发送请求 进行封装
        Call<Translation> call = request.getCall();

        // 3. 发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            // 请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                 ...  
            }

            // 请求失败时回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                ....
            }
        });


<-- RxJava 版方式 ->>
        // 1. 创建 网络请求接口 的实例
        GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

        // 2. 采用Observable<...>形式 对 网络请求 进行封装
        Observable<Translation> observable = request.getCall();

        // 3. 发送网络请求(异步)
        observable.subscribeOn(Schedulers.io())               // 在IO线程进行网络请求
                  .observeOn(AndroidSchedulers.mainThread())  // 回到主线程 处理请求结果
                  .subscribe(new Observer<Translation>() {

                    // 发送请求后调用该复写方法(无论请求成功与否)
                    @Override
                    public void onSubscribe(Disposable d) {
                        ...// 初始化工作
                      }

                    // 发送请求成功后调用该复写方法
                    @Override
                    public void onNext(Translation result) {
                        ...// 对返回结果Translation类对象 进行处理
                    }

                    // 发送请求成功后,先调用onNext()再调用该复写方法
                    @Override
                    public void onComplete() {
                        Log.d(TAG, "请求成功");
                    }
                    // 发送请求失败后调用该复写方法
                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "请求失败");
                    }

                });
    }

5.3 网络请求嵌套回调

  • 背景
    亟待展开嵌套互连网请求:即在首个网络请求成功后,继续再展开几遍网络请求

如 先进行 用户注册 的互连网请求, 待注册成功后回再持续发送
用户登录 的互连网请求

  • 冲突
    嵌套落成互联网请求较为复杂,即嵌套调用函数

上边浮现的是整合 RetrofitRxJava的主干用法,即未用操作符前

// 发送注册网络请求的函数方法
    private void register() {
        api.register(new RegisterRequest())
                .subscribeOn(Schedulers.io())               //在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())  //回到主线程去处理请求结果
                .subscribe(new Consumer<RegisterResponse>() {
                    @Override
                    public void accept(RegisterResponse registerResponse) throws Exception {
                        Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                        login();   //注册成功, 调用登录的方法
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Toast.makeText(MainActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
                    }
                });
    }


// 发送登录网络请求的函数方法
private void login() {
        api.login(new LoginRequest())
                .subscribeOn(Schedulers.io())               //在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())  //回到主线程去处理请求结果
                .subscribe(new Consumer<LoginResponse>() {
                    @Override
                    public void accept(LoginResponse loginResponse) throws Exception {
                        Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
                    }
                });
    }

5. 其实支出须求案例

  • 下边,作者将使用Retrofit &
    RxJava,并结合实际的支出必要情况进行案例的执教
  • 上课的骨子里开发要求景况包涵:

示意图

5.4 互连网请求出错重连

  • 急需境况
示意图
  • 职能须求表明

示意图

  • 成效逻辑

示意图


6. Demo地址

上述全体案例的源代码都存放在:Carson_Ho的Github地址 =
Retrofit结合福睿斯xJava实战体系


7. 总结

  • 正文主要教学了Retrofit & RxJava的重组使用 & 实际费用须求完毕
  • 上边,小编将一而再深入讲解 Rxjava 的其他实际开支需要场景
    (结合有关框架,如RxBindingEventbus),有趣味可以一连关怀Carson_Ho的安卓开发笔记

4. 基础运用

下边,作者将运用最基础的 Retrofit + RxJava 达成 互连网请求 的效用

4.3 步骤完毕

a. 用于描述网络请求 的接口设置

// 传统方式:Call<..>接口形式
public interface GetRequest_Interface {
 @GET("url地址")
    Call<Translation> getCall();
    // 注解里传入 网络请求 的部分URL地址
    // getCall()是接受网络请求数据的方法
}

//  RxJava 方式:Observable<..>接口形式
 @GET("url地址")
public interface GetRequest_Interface {
Observable<Translation> getCall();

步骤1: 添加借助

a. 在 Gradle加入Retrofit库的依赖

build.gradle

dependencies {

// Android 支持 Rxjava
// 此处一定要注意使用RxJava2的版本
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

// Android 支持 Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'

// 衔接 Retrofit & RxJava
// 此处一定要注意使用RxJava2的版本
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

// 支持Gson解析
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

}

b. 添加 网络权限
AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

5.2 网路请求轮询(有标准)

  • 必要境况

示意图


4.5 Demo地址

Carson_Ho的Github地址 =
Retrofit结合奥迪Q5xJava实战体系:基础运用


目录

示意图


3. 二者结合使用

  • Retrofit由此作为前几日最流行的互联网请求库,其中一个重大缘由是:支持RxJava

即:Retrofit除了提供古板的互连网请求格局外,还提供 RxJava 版本的
网络请求情势

  • 两种艺术在利用上最大的界别在于:古板方式采用了 Callback
    接口,而RxJava 格局则应用了Observable接口。首要反映在:

    1. 用于描述互联网请求 的接口 的安装
    2. 互联网请求的卷入格局 & 发送方式
接下去的步子均在MainActivity.java内完成(请看注释)

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Rxjava";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //步骤4:创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
                .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava
                .build();

        // 步骤5:创建 网络请求接口 的实例
        GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

        // 步骤6:采用Observable<...>形式 对 网络请求 进行封装
        Observable<Translation> observable = request.getCall();

        // 步骤7:发送网络请求
        observable.subscribeOn(Schedulers.io())               // 在IO线程进行网络请求
                  .observeOn(AndroidSchedulers.mainThread())  // 回到主线程 处理请求结果
                  .subscribe(new Observer<Translation>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "开始采用subscribe连接");
                    }

                    @Override
                    public void onNext(Translation result) {
                        // 步骤8:对返回的数据进行处理
                        result.show() ;
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "请求失败");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "请求成功");
                    }
                });
    }
}

1. Retrofit 简介

示意图

尤其注意:

  • 准确来说,Retrofit 是三个 RESTful 的 HTTP 网络请求框架的包装。
  • 案由:互连网请求的工作精神上是 OkHttp 已毕,而 Retrofit 仅负责
    互连网请求接口的包裹

关于Retrofit的愈来愈详细介绍请看文章:那是一份很详细的 Retrofit 2.0
使用教程(含实例讲解)


4.2 步骤表明

  1. 累加借助
  2. 创制 接收服务器再次回到数据 的类
  3. 创办 用于描述网络请求 的接口(差异于古板花样)
  4. 创建 Retrofit 实例
  5. 创制 网络请求接口实例 并 配置互联网请求参数(差异于古板样式)
  6. 出殡网络请求(分化于古板样式)
  7. 出殡网络请求
  8. 对回到的数目开展处理

本实例侧重于表明 RxJava
的线程控制,关于Retrofit的施用请看小说:那是一份很详细的 Retrofit
2.0 使用教程(含实例讲解)

手续2:创造 接收服务器再次回到数据 的类
  • 金山词霸API 的多少格式表达如下:

// URL模板
http://fy.iciba.com/ajax.php

// URL实例
http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world

// 参数说明:
// a:固定值 fy
// f:原文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// t:译文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// w:查询内容
  • 示例

API格式表达

  • 据悉 金山词霸API 的数目格式,创设 接收服务器重回数据 的类:

Translation.java

public class Translation {
    private int status;

    private content content;
    private static class content {
        private String from;
        private String to;
        private String vendor;
        private String out;
        private int errNo;
    }

    //定义 输出返回数据 的方法
    public void show() {
        System.out.println( "Rxjava翻译结果:" + status);
        System.out.println("Rxjava翻译结果:" + content.from);
        System.out.println("Rxjava翻译结果:" + content.to);
        System.out.println("Rxjava翻译结果:" + content.vendor);
        System.out.println("Rxjava翻译结果:" + content.out);
        System.out.println("Rxjava翻译结果:" + content.errNo);
    }
}

请点赞!因为您的砥砺是小编创作的最大动力!

有关文章阅读


4.1 作用表明

  • 兑现效益:将汉语翻译成英文 – > 突显到界面
  • 大吉大利方案:选取Get艺术对 金山词霸API 发送网络请求
  1. 先切换成工作线程 发送互联网请求
  2. 再切换成主线程举行 UI更新

金山词典