android - Retrofit链如何调用?

标签 android web-services retrofit rx-java observable

我怎样才能一个接一个地调用改造 2?

我正在阅读有关 RxJava 的资料,并且我已经在使用 RxJava 进行调用,但是我还没有找到一个如何使用 flatMaps 的好例子。

有人可以向我解释如何做吗?

我正在尝试调用这两个电话,在他们都完成后,我想开始一项新 Activity 。

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Retrofit retrofit = new Retrofit.Builder()
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://api.openweathermap.org/data/2.5/")
            .build();

    WeatherService weatherService = retrofit.create(WeatherService.class);
    final Observable<Weather> london = weatherService.getCurrent();

    london.subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<Weather>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(Weather weather) {

                    Log.i("WEATHER","Weather Name: " + weather.getName());


                }
            });

    final Observable<Wind> windObservable = weatherService.getWind();
    windObservable.subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<Wind>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(Wind wind) {

                  Log.i("WEATHER","Wind: " + wind.getSpeed().toString());  

                }
            });

}


}

最佳答案

也许这个链接:https://github.com/ReactiveX/RxJava/wiki/Combining-observables会有所帮助。结帐 zip 。最终 switchMap 方法可能对您的情况有用。

编辑: 也许这个例子 http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/会帮助你更多。

编辑#2:一些代码

login().switchMap(new Func1<FirstResponse, Observable<SecondResponse>>() {
            @Override
            public Observable<SecondResponse> call(FirstResponse t) {
                if (ApiUtils.isLoginValid(t)) {
                        return profile(t.getToken());
                    }
                    else{
                        return Observable.error(new CustomException());
                    }
                }

            }
        }).subscribe(subscriber());

注意:配置文件方法返回类型是 Observable<SecondResponse>订阅者方法类型是 Subscriber<? super SecondResponse>

关于android - Retrofit链如何调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34750719/

相关文章:

android - 在不使用 ColorDrawable 的情况下从 textview 获取背景颜色(API 11)

android - 从 CLI [NativeScript] 将手持和可穿戴 Android 应用打包在一起

java - 如何在没有 baseUrl 的情况下设置 Retrofit

java - 如何使用 Square 的改造将多维哈希作为查询参数传递

android - 通过 mvvm android 处理异常

java - 当有 wifi 连接时,android 会断开蜂窝连接吗?

android - notifyDataSetChanged后ListView重复内容

java - Telnet 到 Web 服务 - HTTP/1.1 400 错误请求

java - 在WebService(JAX-WS)中创建方法以将数据发送到mysql DB

java - 在 Java 中访问 Subversion 的一种方法