1. 程式人生 > >Retrofit結合Rxjava初步使用

Retrofit結合Rxjava初步使用

Retrofit和Rxjava結合使用

1.新增依賴:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

2.Retrofit的使用:

1).編寫API服務程式碼

package com.micky.retrofitrxandroiddagger2.data.api;

import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;

import retrofit.Call;
import retrofit.http.GET;
import retrofit.http.Query;
import rx.Observable;

/**
 * @Project retrofitrxandroiddagger2
 * @Packate com.micky.retrofitrxandroiddagger2.data.api
 * @Description
 * @Author Micky Liu
 * @Email 
[email protected]
* @Date 2015-12-21 17:22 * @Version 1.0 */ public interface ApiService { @GET("service/getIpInfo.php") Call<MyMessage> getIpInfo(@Body FprmBody body); }

2).使用GsonFormat定義接收資料的Bean類

public class MyMessage {

    /**
     * reason : 成功的返回
     * result : {"code":100000,"text":"答不答就看我心情啦。"}
     * error_code : 0
     */

    private String reason;
    private ResultBean result;
    private int error_code;

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public ResultBean getResult() {
        return result;
    }

3).網路請求資料

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://op.juhe.cn/robot/index/")
            .client(new OkHttpClient())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    FormBody body = new FormBody.Builder()
            .add("info","%E6%88%91%E6%98%AF%E8%B0%81&")
            .add("dtype","&loc=&userid=&")
            .add("key","f5d2667dff1bfc58786a06c04c8429af").build();

    netAPI= retrofit.create(NetAPI.class);
    netAPI.Message(body).enqueue(new Callback<MyMessage>() {
        @Override
        public void onResponse(Call<MyMessage> call, Response<MyMessage> response) {
            
        }

        @Override
        public void onFailure(Call<MyMessage> call, Throwable t) {

        }
    });



3.Retrofit和Rxjava結合使用

1).首先在初始化Retrofit中加入addCallAdapterFactory(RxjavaCallAdapterFactory.create())

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://op.juhe.cn/robot/index/")
                    .client(new OkHttpClient())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();


2).API類中Call變為Observable

Observable<MyMessage> Message(@Body FormBody body);


3).具體程式碼

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://op.juhe.cn/robot/index/")
                    .client(new OkHttpClient())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            FormBody body = new FormBody.Builder()
                    .add("info","%E6%88%91%E6%98%AF%E8%B0%81&")
                    .add("dtype","&loc=&userid=&")
                    .add("key","f5d2667dff1bfc58786a06c04c8429af").build();

            netAPI= retrofit.create(NetAPI.class);
            netAPI.Message(body).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<MyMessage>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            Log.e(TAG,"onsubscribe");
                        }

                        @Override
                        public void onNext(@NonNull MyMessage myMessage) {
                            Log.e(TAG,"onNext");
                            tx.setText(myMessage.getResult().getText());
                        }

                        @Override
                        public void onError(@NonNull Throwable e) {
                            Log.e(TAG,"onError");
                        }

                        @Override
                        public void onComplete() {
                            Log.e(TAG,"onComplete");
                        }
                    });
        }
    })

不同之處在於加入三個方法:

subscribeOn(Schedulers.io):指定Observable的工作, 在我們的例子中Observable的工作即傳送請求, 在io執行緒做, 指定了被觀察者的處理執行緒;

observeOn(AndroidSchedulers.mainThread()):指定最後onNext()回撥在主執行緒, 即指定了通知後續觀察者的執行緒.

subscribe():新增一個訂閱者, 即它的觀察者.當請求返回後, 回到主執行緒, 更新UI.


相關推薦

Retrofit結合Rxjava初步使用

Retrofit和Rxjava結合使用 1.新增依賴: compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.google.code.gson:gson:2.8.0' compile 'com.squar

Retrofit結合RxJava簡單get/post請求(傳參)

ApiServices: public interface ApiServices { //post請求:第一個引數url,可以傳遞為空,不能不寫,第二個map集合為引數 @POS

RXJava & Retrofit 結合最佳實踐

RXJava & Retrofit 結合最佳實踐 開始 開始 本來決定自己碼,發現早有大神寫的明明白白了,於是這裡貼一下連結,共享大家,也是自己備忘,哈哈哈哈 RxJava 與 Retrofit 結合的最佳實踐 https://www.ji

RetrofitRxjava結合使用例項

環境配置 在Module:app的build.gradle下新增如下依賴,然後sync now。下面這些依賴有些沒有用到,暫時都新增進去不會有錯。 dependencies { implem

RetrofitRxJava結合使用-------簡易版

這兩個框架都是現在特別流行的框架,強強聯合使我們的效率變得更加的直接 首先我們需要匯入其中的依賴 implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squa

與REST無縫結合-RxJavaRetrofit

在上一章中,我們學習瞭如何使用排程器在不同於UI執行緒的執行緒上操作。我們學習瞭如何高效的執行I/O任務而不用阻塞UI以及如何執行耗時的計算任務而不耗損應用效能。在最後一章中,我們將建立一個最終版的真實世界的例子,用Retrofit對映到遠端的API,非同步

OkRx擴充套件,讓OkGo完美結合RxJava,比Retrofit更簡單易用

OkGo - Rx擴充套件,可以方便的和RxJava聯用,如果你熟悉Retrofit,那麼這個框架和Retrofit使用方式很像。 以下是該專案相關文章的傳送門: 聯絡方式 如何選擇網路框架 說了這麼多功能,我們來看看為什麼要使用OkGo這個框架。 首先目前主流的幾

淺談Android MVP設計模式(簡單結合RxJava+Retrofit

什麼是MVP 為什麼要用MVP 怎麼去完成一個MVP的設計呢 demo例項功能雖小五臟俱全 準備工作 View的基類

APP實用開發—RxJavaRetrofit 結合使用

RxJava 和 Retrofit 結合使用的幾個最常見使用方式舉例。 RxJava中有個叫做Subscription的介面,可以用來取消訂閱. public interface Subscription { void unsubscribe(

RetrofitRxJava結合使用

使用Retrofit的時候就不得不提到RxJava,RxJava是一個基於觀察者模式的非同步實現。關於RxJava的入門學習,強烈推薦《給Android開發者的RxJava詳解》 正如上篇部落格所說,得益於Retrofit中靈活的Converter

Mvp Retrofit Okhttp Rxjava

extend fin 添加 okhttp3 bind item .get 關聯 osi MainActivity package com.bwie.shexinhai; import android.os.Bundle; import android.support

RecyclerView+Retrofit+OkHttp+RxJava

泛型方法 bsp list row ket ica throws 一個 tro *圖片初始化public class FrescoClass extends Application{ @Override public void onCreate() {

retrofit+okhttp+rxjava使用、封裝

概述 該demo對聯網框架進行了封裝,包括連網獲取,activity onDestroy時網路取消,請求響應的log,聯網的管理等。 所需依賴     implementation 'com.squareup.retrofit2:retrofit:2.4

安卓專案實戰之強大的網路請求框架okGo使用詳解(五):擴充套件專案okRx,完美結合RxJava

前言 在第一篇講解okGo框架新增依賴支援時,還記得我們額外新增的兩個依賴嗎,一個okRx和一個okServer,這兩個均是基於okGo框架的擴充套件專案,其中okRx可以使請求結合RxJava一起使用,而okServer則提供了強大的下載上傳功能,如斷點支援,多工管理等,本篇我們主要講

Retrofit+okhttp+rxjava, 快取策略使用

主要涉及幾個要點:  要使用離線快取的頁面網路請求方式必須要用GET(POST不可以),其他不要的頁面還是用POST 在新增攔截器時,需要新增網路攔截器( .addNetworkInterceptor(new NetInterceptor()) //有網情況下,一分鐘內每次

retrofit+okhttp+rxjava

1.上傳檔案 @Multipart @POST(API_P_PERSONALDATA) Flowable<FileBean> uploadfile(@PartMap Map<String, RequestBody> files); //上傳多張

RetrofitRxJava和OKhttp對接

Retrofit在整個網路請求架構(Rxjava+Retrofit+OKhttp)的位置處於一箇中間連線的環節,非同步解耦層是Rxjava,網路請求層是OKhttp。 那Retrofit是如何與二者進行對接的,本人菜鳥,在這裡寫一下自己的理解,如有不合理之處,懇請指正。

Retrofit+Okhttp+RxJava介紹的簡單太簡單,但很容易理解

轉載的 https://www.cnblogs.com/whoislcj/p/5539239.html     Android okHttp網路請求之Retrofit+Okhttp+RxJava組合 前言:     通過上面的學習

Retrofit+okhttp+Rxjava 網路請求

implementation 'io.reactivex:rxandroid:1.0.1' implementation 'com.squareup.retrofit2:retrofit:2.0.2' implementation 'com.squareup.retrofit2:conver

js與h5的結合初步學習。

初步學習拖放事件 首先了解一下與拖放事件有關的標籤,拖動某元素時依次觸發: dragstart drag dragend 其次瞭解某元素拖動到一個你想要拖動的目標上,依次發生: drage