2016-09-15 57 views
1

我想看看如何对异步(=非阻塞)RESTful Volley请求链进行排序的Android java示例。回调地狱:排序RESTful排球请求? RxAndroid?

这是RxAndroid的用途吗?

  • 如果是这样,我想看看使用RxAndroid的例子。
  • 如果不是,我还是希望看到一个很好的例子,不要跳入CALLBACK HELL!

我试图这样做,但在CBHell结束了: Need to send multiple Volley Requests - in a sequence

我想从我的第一个要求我的结果在第二个请求中使用。然后我要在第三个请求中使用第二个请求的结果。请问,我如何链接这些Volley请求?

回答

3

您可以使用Rx通过使用flatMap方法链接多个请求。

flatMap要求您返回另一个Observable您的选择类型,因此您可以使用另一种类型进行异步操作。

以下所有示例均使用新的rx v2进行制作。但所有的方法和机制也适用于V1

例子:

final MyVolleyApi api = new MyVolleyApi(); 

api.getName() 
.subscribeOn(Schedulers.io()) 
.observeOn(AndroidSchedulers.mainThread()) 
.flatMap(new Function<String, ObservableSource<Integer>>() { 
    @Override 
    public ObservableSource<Integer> apply(String name) throws Exception { 
     return api.getAgeForName(name); 
    } 
}) 
.flatMap(new Function<Integer, ObservableSource<Date>>() { 
    @Override 
    public ObservableSource<Date> apply(Integer age) throws Exception { 
     return api.getYearOfBirthForAge(age); 
    } 
}) 
.doOnError(new Consumer<Throwable>() { 
    @Override 
    public void accept(Throwable throwable) throws Exception { 
     // handle the exception that occurred during one of the api calls 
    } 
}) 
.subscribe(new Consumer<Date>() { 
    @Override 
    public void accept(Date date) throws Exception { 
     // do something with the 3rd argument here 
    } 
}); 

这是MyVolleyApi哑类:

public class MyVolleyApi { 

    public Observable<String> getName() { 
     return Observable.just("Rx"); 
    } 

    public Observable<Integer> getAgeForName(String name) { 
     return Observable.just(24); 
    } 

    public Observable<Date> getYearOfBirthForAge(int age) { 
     return Observable.just(new Date()); 
    } 
} 

这可以应用到任何东西,它不是在所有

volely具体
+0

反正有,我可以使用这个连续的异步调用LiveData改造 –