java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询
前言
Rxjava,由于其基于事件流的鏈式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
Github截圖
RxJava如此受歡迎的原因,在于其提供了豐富 & 功能強大的操作符,幾乎能完成所有的功能需求
今天,我將為大家帶來 Rxjava創建操作符的常見開發應用場景:輪詢需求 ,并結合Retrofit 與RxJava 實現,希望大家會喜歡。
本系列文章主要基于 Rxjava 2.0
接下來的時間,我將持續推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操作符、應用場景、背壓等等 ,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!
示意圖
目錄
示意圖
1. 需求場景
示意圖
注:關于 Rxjava中的延時創建操作符interval() 和 intervalRange()的使用請看文章Android RxJava:最基礎的操作符詳解 - 創建操作符
2. 功能說明
本文將采用Get方法對 金山詞霸API 按規定時間 重復發送網絡請求,從而模擬 輪詢 需求實現
采用 Gson 進行數據解析
金山詞典
3. 具體實現
下面我將結合 Retrofit 與RxJava 實現輪詢需求
3.1 步驟說明
添加依賴
創建 接收服務器返回數據 的類
創建 用于描述網絡請求 的接口(區別于傳統Retrofit形式)
創建 Retrofit 實例
創建 網絡請求接口實例 并 配置網絡請求參數(區別于傳統Retrofit形式)
發送網絡請求(區別于傳統Retrofit形式)
發送網絡請求
對返回的數據進行處理
本實例側重于說明 RxJava 的輪詢需求,關于Retrofit的使用請看文章:這是一份很詳細的 Retrofit 2.0 使用教程(含實例講解)
3.2 步驟實現
步驟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
步驟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() {
Log.d("RxJava", content.out );
}
}
步驟3:創建 用于描述網絡請求 的接口
采用 注解 + Observable<...>接口描述 網絡請求參數
GetRequest_Interface.java
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hi%20world")
Observable getCall();
// 注解里傳入 網絡請求 的部分URL地址
// Retrofit把網絡請求的URL分成了兩部分:一部分放在Retrofit對象里,另一部分放在網絡請求接口里
// 如果接口里的url是一個完整的網址,那么放在Retrofit對象里的URL可以忽略
// 采用Observable<...>接口
// getCall()是接受網絡請求數據的方法
}
接下來的步驟均在RxJavafixRxjava.java內實現(請看注釋)
RxJavafixRxjava.java
public class RxJavafixRxjava extends AppCompatActivity {
private static final String TAG = "Rxjava";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 步驟1:采用interval()延遲發送
* 注:此處主要展示無限次輪詢,若要實現有限次輪詢,僅需將interval()改成intervalRange()即可
**/
Observable.interval(2,1, TimeUnit.SECONDS)
// 參數說明:
// 參數1 = 第1次延遲時間;
// 參數2 = 間隔時間數字;
// 參數3 = 時間單位;
// 該例子發送的事件特點:延遲2s后發送事件,每隔1秒產生1個數字(從0開始遞增1,無限個)
/*
* 步驟2:每次發送數字前發送1次網絡請求(doOnNext()在執行Next事件前調用)
* 即每隔1秒產生1個數字前,就發送1次網絡請求,從而實現輪詢需求
**/
.doOnNext(new Consumer() {
@Override
public void accept(Long integer) throws Exception {
Log.d(TAG, "第 " + integer + " 次輪詢" );
/*
* 步驟3:通過Retrofit發送網絡請求
**/
// a. 創建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 設置 網絡請求 Url
.addConverterFactory(GsonConverterFactory.create()) //設置使用Gson解析(記得加入依賴)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava
.build();
// b. 創建 網絡請求接口 的實例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
// c. 采用Observable<...>形式 對 網絡請求 進行封裝
Observable observable = request.getCall();
// d. 通過線程切換發送網絡請求
observable.subscribeOn(Schedulers.io()) // 切換到IO線程進行網絡請求
.observeOn(AndroidSchedulers.mainThread()) // 切換回到主線程 處理請求結果
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation result) {
// e.接收服務器返回的數據
result.show() ;
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "請求失敗");
}
@Override
public void onComplete() {
}
});
}
}).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long value) {
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對Error事件作出響應");
}
@Override
public void onComplete() {
Log.d(TAG, "對Complete事件作出響應");
}
});
}
}
3.3 測試結果
示意圖
4. Demo地址
喜歡的麻煩點個star!
5. 總結
本文主要講解了 Rxjava創建操作符的實際開發需求場景:輪詢需求 ,并結合Retrofit 與RxJava 實現
接下來的時間,我將持續推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操作符、應用場景、背壓等等
示意圖
感興趣的同學可以繼續關注本人運營的Wechat Public Account:
請點贊!因為你的鼓勵是我寫作的最大動力!
不定期分享關于安卓開發的干貨,追求短、平、快,但卻不缺深度。
總結
以上是生活随笔為你收集整理的java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 先考一键还是先学java_是先考C还是先
- 下一篇: mysql 分钟_mysql分钟到小时和