2016-03-04 42 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