我正在向服务器发送一个简单的get方法,并使用RxJava和Retrofit获得结果。我所做的是:
接口
public interface Posts {
@GET("/typicode/demo/{path}")
Observable<List<Beans>> getPosts(@Path("path") String path);
}
RetrofitInstance
public static Retrofit getInstance() {
if (retrofit == null) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(client)
.build();
}
return retrofit;
}
MainActivity
Observer<List<Beans>> observer = new Observer<List<Beans>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<Beans> value) {
Log.d("Saket", value.toString());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
Posts client = RetrofitClientInstance.getInstance().create(Posts.class);
client.getPosts("posts").observeOn(Schedulers.newThread()).subscribeOn(AndroidSchedulers.mainThread()).subscribe(observer);
我使用HTTPLoggingInterceptor
得到正确的输出。
答案 0 :(得分:2)
您可以像这样使用subscribeWith
还更改订阅-> Schedulers.newThread()或Schedulers.io() 现在,您正在通过UI线程进行网络调用
["get","color"]
答案 1 :(得分:0)
当我使用Single Observable和DisposableSingleObserver作为观察者时,它可以工作。