2016-03-04 45 views
-2

我使用Retrofit來調用Restful API。我閱讀了Rx Android的一些文章,但是我並沒有明確地認識到如何將Rx Android與Retrofit集成到新定義的可觀察模式中。 我指的是來自Google的鏈接。但沒有得到澄清如何實現它,所以我想要適當的例子或任何職位學習。使用RxAndroid整合進行改造

+1

更具體。你到底想做什麼? –

+0

想要將api與Rx Android集成到可觀察的模式中。 –

+0

有這麼多文章,http://randomdotnext.com/retrofit-rxjava/ https://medium.com/@ahmedrizwan/rxandroid-and-retrofit-2-0-66dc52725fff#.3gbm0jt58 –

回答

4

如果你正在切換到RxAndroid,我建議你從:http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1開始。作者在帖子中仔細解釋說,系列中有4個職位。

然後你可以閱讀更多有關Retrofit2:https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/;有Call,Observable和Future的例子。

從使用可觀察到得到onNext願望輸出(類似於回調)的簡單的Hello World:

Observable<String> myObservable = Observable.create(
    new Observable.OnSubscribe<String>() { 
     @Override 
     public void call(Subscriber<? super String> sub) { 
      sub.onNext("Hello, world!"); 
      sub.onCompleted(); 
     } 
    } 
); 

Subscriber<String> mySubscriber = new Subscriber<String>() { 
    @Override 
    public void onNext(String s) { System.out.println(s); } 

    @Override 
    public void onCompleted() { } 

    @Override 
    public void onError(Throwable e) { } 
}; 

myObservable.subscribe(mySubscriber); 
// Outputs "Hello, world!" 

然後我們就可以實現Retrofit2是這樣的:

interface GitHubService { 
    @GET("/repos/{owner}/{repo}/contributors") 
    Observable<List<Contributor>> repoContributors(
     @Path("owner") String owner, 
     @Path("repo") String repo); 
} 

Subscriber<List<Contributor>> repoSubscriber = new Subscriber<List<Contributor>>() { 
    @Override 
    public void onNext(List<Contributor> list) { 

     // do something with the list 
    } 


    @Override 
    public void onCompleted() { } 

    @Override 
    public void onError(Throwable e) { } 
}; 

gitHubService.repoContributors("square", "retrofit") 
    .subscribe(repoSubscriber); 

您可以使用Action1以及訂閱者。

gitHubService.repoContributors("square", "retrofit") 
    .subscribe(new Action1<List<Contributor>>() { 
     @Override public void call(List<Contributor> contributors) { 
     // ... 
     } 
    }); 
+0

雖然這個鏈接可以回答這個問題,最好在這裏包含答案的重要部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/11509555) –

+1

我編輯了我的答案。謝謝。 – ninjahoahong