我们可以一起使用 Retrofit、RxJava、RxAndroid 吗? [英] Can we use Retrofit, RxJava, RxAndroid together?

查看:50
本文介绍了我们可以一起使用 Retrofit、RxJava、RxAndroid 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用过:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:retrofit
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

我应该这样使用吗,我阅读 retrofit 1.x 本身在工作线程上工作?我应该同时使用 rxJavaretrofit 还是只使用 retrofit 为我工作?

Should i use like this way, i read retrofit 1.x itself work on worker thread? Should i have to use rxJava and retrofit together or just retrofit work for me?

推荐答案

是的,你可以.

你应该在你的 gradle 中添加这个依赖项:

You should add this dependencies in your gradle:

dependencies {
    ...
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.2.1'
   ...
}

清单中的权限:

<uses-permission android:name="android.permission.INTERNET" />  

服务创建者可能是这样的:

A service creator could be like this:

public class RxServiceCreator {

    private OkHttpClient.Builder httpClient;
    private static final int DEFAULT_TIMEOUT = 30; //seconds

    private Gson gson;
    private RxJavaCallAdapterFactory rxAdapter;
    private Retrofit.Builder builder;

    private static RxServiceCreator mInstance = null;

    private RxServiceCreator() {
        httpClient = new OkHttpClient.Builder();
        gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
        rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
        builder = new Retrofit.Builder()
                .baseUrl("yourbaseurl")
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(rxAdapter);

        if (BuildConfig.REST_DEBUG) {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            httpClient.addInterceptor(logging);
        }

        httpClient.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
        httpClient.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
        httpClient.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
    }

    public static RxServiceCreator getInstance() {
        if (mInstance == null) {
            mInstance = new RxServiceCreator();
        }
        return mInstance;
    }

    public <RESTService> RESTService createService(Class<RESTService> service) {
        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(service);
    }
}

你的界面可能是这样的:

You interface could be some like this:

public interface UserAPI {

    @GET("user/get_by_email")
    Observable<Response<UserResponse>> getUserByEmail(@Query("email") String email);
}

最后进行 api 调用:

And finally to make an api call:

UserAPI userApi = RxServiceCreator.getInstance().createService(UserAPI.class);

userApi.getUserByEmail("user@example.com")
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(userResponse -> {
                            if (userResponse.isSuccessful()) {
                                Log.i(TAG, userResponse.toString());
                            } else {
                                Log.i(TAG, "Response Error!!!");
                            }
                        },
                        throwable -> {
                            Log.e(TAG, throwable.getMessage(), throwable);
                        });

这篇关于我们可以一起使用 Retrofit、RxJava、RxAndroid 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆