如何“等待”来自API的数据

时间:2019-05-15 10:34:08

标签: android retrofit rx-java

我有问题, 如何等待来自API的数据?

我会这样写代码:

testProguardFiles

我将有一个列表供我在任何地方使用。 我不想覆盖任何方法。

DataAPI:

List<User> userList = dataAPI.getAllUser();

UserService

public class DataAPI {
public DataAPI(){
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        userAPI = retrofit.create(UserService.class);
public class DataAPI {
    [...]
    private UsertService userAPI;

    public DataAPI(){
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        userAPI = retrofit.create(UserService.class);
   }

   Observable<List<User>> getAllUser() {
        return userAPI.getAllUser();
    }
}

3 个答案:

答案 0 :(得分:0)

可以使用rxJava完成,以获取更多详细信息:read

答案 1 :(得分:0)

您只需要设置超时并增加超时,即可等待服务的响应。 (优先考虑writeTimeout)

OkHttpClient client = new OkHttpClient.Builder();
client .connectTimeout(10, TimeUnit.SECONDS);
client .writeTimeout(30, TimeUnit.SECONDS);
client .readTimeout(40, TimeUnit.SECONDS);


Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://api.yourapp.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .client(client)
    .build();

答案 2 :(得分:0)

@Kubek,您需要订阅的是可观察对象。 您可能应该做的是:

userAPI.getAllUser()
.subscribeOn(Schedulers.IO)
.observeOn(AndroidSchedulers.Main)
.subscribe(
// do some stuff 
)

有关如何使用订阅方法的文档,请参见:http://reactivex.io/documentation/operators/subscribe.html