日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询

發布時間:2025/3/19 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 实际应用讲解:(无条件)网络请求轮询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。