葡京娱乐注册Android:Retrofit 结合 RxJava的古雅使用(含实例教程)


Behance和Dribbble都是主流的设计作品分享平台,为广大设计师同胞们带了可观的便利,所以重重设计师通常两单社区还见面关心。很多设计师在展示个人信息的时刻,通常为会见管当时简单个平台的链接放到个人资料里面。

前言

  • Andrroid开中,网络要十分常用,而当Android网络要求库中,Retrofit大凡随即极度暖之一个网要求库

Github截图

  • Retrofit之所以当本最为盛的大网要库,其中一个要原因是:支持RxJavaRxjava由于其依据事件流的链式调用、逻辑简洁
    & 使用简单
    的特色,深受各大 Android开发者的迎。

Github截图

  • 今日,我拿为大家带来 Retrofit
    结合Rxjava事实上用案例教学,即常见开发应用场景实现
    ,希望大家会爱。

正文主要因Retrofit 2.0 & Rxjava 2.0

  1. 以系列文章要依据 Rxjava 2.0
  2. 连片下的日,我将连推出 AndroidRxjava 2.0
    的同等多元文章,包括原理、操作符、应用场景、背压等等

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

示意图


率先,看看Behance和Dribbble在分级的定势及闹啊两样。

目录

示意图


Behance:The leading online platform to showcase & discover creative
work.

1. Retrofit 简介

示意图

特别注意:

  • 准确的话,Retrofit 是一个 RESTful 的 HTTP 网络要框架的卷入。
  • 案由:网络要的劳作精神上是 OkHttp 完成,而 Retrofit 仅负责
    网络要接口的包

关于Retrofit的愈益详实介绍请圈文章:就是均等卖大详细的 Retrofit 2.0
使用教程(含实例讲解)


Behance将协调定义为“展示以及发掘创意作品的主任平台”。有人拿其当设计师的博客,分类详细,内容广,涵盖网页设计、交互设计、用户界面/用户体验、摄影、工业规划等多问题之始末。上面各种精彩而新颖之情节总能给设计师带来海量的计划灵感。

2. RxJava简介

示意图

关于RxJava的愈加详细介绍请看文章:Android Rxjava:这是一样首 清晰 &
易懂的Rxjava 入门教程


Dribbble:What are you working on? Dribbble is a community of
designers answering that question each day.

3. 二者结合使用

  • Retrofit故此当当今极其盛行的网络要库,其中一个首要缘由是:支持RxJava

即:Retrofit除提供传统的网要方式外,还提供 RxJava 版本的
网络请求方式

  • 星星种植方式于动上无比特别之界别在:传统办法利用了 Callback
    接口,而RxJava 方式则使了Observable接口。主要体现在:

    1. 用以描述网络要求 的接口 的设置
    2. 网络要的卷入形式 & 发送形式

Dribbble的概念是“为设计师而著及解答”(Show and tell for designers)。
其口号是,你在写作什么?鼓励创作者上污染个人的作品,以及正在编写的创作到
Dribbble
网站上。其当细节方面的示,更像是一律漫漫简短的微博,设计师们好天天晒下团结于开呀,互动性较强。

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

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

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

整整网站充满了篮球的因素,
logo也是相同颗篮球的像。用户还吃叫Player(球员),每一个创作都称之为Shot(投篮),管理员称Coach(教练),用户等为分为Rookies到All-Stars,
也是篮球术语。

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, "请求失败");
                    }

                });
    }

辅助,在登记账号、发布作品方面,各自为产生不同。

4. 基础运用

脚,我用使用最基础的 Retrofit + RxJava 实现 网络要求 的功用

知乎上的设计师Ellen Zheng认为:

4.1 功能说明

  • 贯彻力量:将中文翻译成英文 – > 显示到界面
  • 心想事成方案:采用Get方法对 金山词霸API 发送网络要
  1. 预先切换至工作线程 发送网络要
  2. 重新切换到主线程进行 UI更新

金山词典

Behance凡作品集平台,重于系统地显示,尤其是无穷无尽作品。这是开放平台,任何人都足以挂号,游客呢得为创作触及单「赞」。

4.2 步骤说明

  1. 添加凭借
  2. 创 接收服务器返回数据 的近乎
  3. 始建 用于描述网络要求 的接口(区别为传统式)
  4. 创建 Retrofit 实例
  5. 创办 网络要接口实例 并 配置网络要参数(区别为传统形式)
  6. 出殡网络要(区别为传统花样)
  7. 发送网络要
  8. 对回的数开展处理

本实例侧重于说明 RxJava
的线程控制,关于Retrofit的运用要看文章:即时是同等份好详细的 Retrofit
2.0 使用教程(含实例讲解)

Dribbble则是一个吃设计师发布在创作中之创作之地方,需要会员约才能够发布作品。个人觉得再次如半绽放的社交网络,注重反映及交流,鼓励会员互动提出修改意见,你还是可于他人的作品idea出发进行和谐之演绎,再公布出去。至少dribbble的初衷是这般,只是因为快走红就成为「在400×300如素里摆酷」的地方…:)

4.3 步骤实现

由个烂比方,Behance就比如设计师的厅堂,展示大方,井井有条。Dribbble就像设计师的厨,进去问一样句「今天打算做点啥?」,瞅见各种半成品和成品,七嘴八舌,其乐融融。

手续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"/>

自从披露之情节类型上来拘禁,Behance
发布之比如说是博客文章,一个创作可以发大多单图,没有高低、数量限制,还可加格式化文本、贴代码、加视频、设置背景等等。而Dribbble一软只能发布一摆图纸,并且限定大小(300×400
或 600×800),非常像限制140配之微博。

步骤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);
    }
}

又,Behance和Dribbble二者各自发生什么优势为?

手续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()是接受网络请求数据的方法
}

作为设计师的寻常灵感来源于网站,Behance和Dribble各自的优势大致相同却各有特点。从“设计的目的是化解问题”的角度看,显然Behance能够展现更多除视觉之外的情节。而Dribbble则重复要表现有视觉snippet,很难说其是否是一个能学到物的地方,但是只能否认间拥有大量相当程度的视觉设计师以及用户界面设计师。从使用者的角度来拘禁,这简单只网站于着力上虽闹英雄的异样,Behance
注重展示同作品;Dribbble 则尊重社交与彼此。在争议性上,由于 Dribbble
的品格轻松,加上使用者几乎都落得传单张作,常会起纯粹炫技、不实用的标签是。而
Behance 则为人们可以登记,则下限较逊色,不过上限仍有多色超高之创作。

连片下去的步子都于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, "请求成功");
                    }
                });
    }
}

终极,问题来了,到底该选哪个吧?

4.4 测试结果

示意图

Behance总能够为设计师带来海量的设计灵感,可以便捷找到优秀而新颖之情节。但是当设计师来说,Dribbble无疑是独再体现专业水准的地方,当在Dribbble上被点赞的心思真的好据此幸福来写。

4.5 Demo地址

Carson_Ho的Github地址 =
Retrofit结合RxJava实战系列:基础运用


于网上看看有人拿Behance比成大海,把Dribbble比作沙滩上的贝壳,这个比喻非常好的。我深信不疑大部分设计师不仅能欣赏大海的浩荡,也能够玩贝壳的鬼斧神工。个人认为,如果是为了发展性,比较推荐Behance,毕竟
Dribbble 还要发出邀请码才能够开行。

5. 实际付出需要案例

  • 脚,我拿动用Retrofit &
    RxJava,并结合实际的开支需要状况进行案例之讲授
  • 教的其实付出需要状况包括:

示意图

那,你的取舍是呀啊?

5.1 网络要轮询(无条件)

  • 需状况说明

示意图

  • 切实落实
    具体求看文章:Android RxJava
    实际运用讲解:(无条件)网络要轮询

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

  • 需状况

示意图

  • 具体落实
    切切实实求看文章:Android RxJava
    实际采用讲解:(有规范)网络要轮询

5.3 网络要嵌套回调

  • 背景
    内需展开嵌套网络要:即在第1单网要成功后,继续更展开相同蹩脚网络要

如 先进行 用户注册 的网要, 待注册成功后掉又持续发送
用户登录 的大网要

  • 冲突
    嵌套实现网络要较为复杂,即嵌套调用函数

下面展示的凡整合 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();
                    }
                });
    }
  • 釜底抽薪方案
    结合 RxJava2倍受的更换操作符FlatMap()实现嵌套网络要

  • 现实贯彻
    现实求圈文章:
    Android RxJava
    实际运用讲解:网络要嵌套回调


5.4 网络要出错重连

  • 要求状况
示意图
  • 效益要求说明

示意图

  • 效益逻辑

示意图

  • 切实贯彻
    切实要圈文章:Android RxJava
    实际采用讲解:网络要出错重连(结合Retrofit)

5.5 合并数据源 & 统一显示

  • 求状况

示意图

  • 功效说明
    即便,同时向2独服务器发送网络要 ->> 获取数据 ->>
    合并数据 ->> 统一展示暨客户端

  • 切切实实贯彻
    切切实实求圈文章:Android RxJava
    实际应用讲解:合并数据源

至此,关于Retrofit & RxJava的实在付出需要状况讲解结束。


6. Demo地址

上述所有案例之源代码都存放于:Carson_Ho的Github地址 =
Retrofit结合RxJava实战系列


7. 总结

  • 本文主要讲解了Retrofit & RxJava的结缘使用 & 实际开支需要实现
  • 下,我拿连续深入讲解 Rxjava 的另实际付出需求场景
    (结合相关框架,如RxBindingEventbus),有趣味可以继续关心Carson_Ho的安卓开发笔记

呼吁点赞!因为您的鞭策是自撰文的最为深动力!

相关文章读

  • 操作符使用
    Android:这是同篇 清晰 & 易懂的Rxjava
    入门教程
    Android RxJava:最基础之操作符详解 –
    创建操作符
    Android RxJava:图文详解
    变换操作符
    Android RxJava:组合 / 合并操作符
    详细教程
    Android RxJava:功能性操作符
    全面授课
  • 其实应用讲解
    Android RxJava
    实际利用讲解:(无条件)网络要轮询
    Android RxJava
    实际行使讲解:(有规范)网络要轮询
    Android RxJava
    实际使用讲解:网络要嵌套回调
    Android RxJava
    实际利用讲解:合并数据源
    Android RxJava 实际采用讲解:从磁盘 / 内存缓存着
    获取缓存数据
    Android RxJava
    实际用讲解:联合判断
    Android RxJava:细说 线程控制(切换 / 调度
    )(含Retrofit实例讲解)
    Android RxJava
    实际采用讲解:网络要出错重连(结合Retrofit)

迎关注Carson_Ho的简书!

非期分享有关安卓开发的干货,追求短、平、快,但倒是休短深度