如何使用RxJava 2 + Retrofit 2进行发布?

Ege*_*glu 6 android rx-java retrofit2 rx-java2

这个问题可能听起来很简单,但我很难过.

我可以通过这种方式进行改造2:

class RetrofitClient {

    private static Retrofit retrofit = null;

    static Retrofit getClient(String baseUrl) {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}
Run Code Online (Sandbox Code Playgroud)

Api服务界面:

 @POST("postsInit")
    @FormUrlEncoded
    Call<InitPost> postInit(
            @Field("appVersion") String versionName,
            @Field("appId") String applicationId,

    );
Run Code Online (Sandbox Code Playgroud)

最后:

apiService.postInit(versionName, applicationId).enqueue(new Callback<InitPost>() {
            @Override
            public void onResponse(@NonNull Call<InitPost> call, @NonNull Response<InitPost> response) {

                if (response.isSuccessful()) {
                    Timber.d("post submitted to API");
                    getInitResponse();
                }
            }

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

                if (call.isCanceled()) {
                    Timber.e("Request was aborted");
                } else {
                    Timber.e("Unable to submit post to API.");
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

如何将其转换为RxJava 2?我已经实现了转换器工厂,但互联网上没有关于使用rxJava 2和改装2的信息.

Par*_* P. 6

RxJava代码中转换您的电话: -

apiService.postInit(versionName, applicationId)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .unsubscribeOn(Schedulers.io())
            .subscribe(new Subscriber<InitPost>() {
                @Override
                public void onSubscribe(Subscription s) {

                }

                @Override
                public void onNext(InitPost initPost) {

                }

                @Override
                public void onError(Throwable t) {

                }

                @Override
                public void onComplete() {

                }
            });
}
Run Code Online (Sandbox Code Playgroud)

邮政服务界面:

@POST("postsInit")
@FormUrlEncoded
Observable<InitPost> postInit(
        @Field("appVersion") String versionName,
        @Field("appId") String applicationId,
);
Run Code Online (Sandbox Code Playgroud)

  • 你应该在`onNext()`里面做. (2认同)