Как «дождаться» данных от API - PullRequest
0 голосов
/ 15 мая 2019

У меня есть проблема, как ждать данных от API?

Я бы написал такой код:

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

У меня был бы список, где бы я его ни использовал.Я не хочу переопределять какие-либо методы.

DataAPI:

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();
    }
}

UserService


    @GET("/user/all")
    Observable<List<User>> getAllUser();

Ответы [ 3 ]

0 голосов
/ 15 мая 2019

Вам просто нужно установить время ожидания и увеличить его, так как вам нужно дождаться ответа от службы. (Дайте приоритет 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();
0 голосов
/ 15 мая 2019

@ Кубек, вам нужно подписаться на наблюдаемое. Что вы, вероятно, должны сделать, это:

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

Для получения документации по использованию метода подписки см. http://reactivex.io/documentation/operators/subscribe.html

0 голосов
/ 15 мая 2019

Это можно сделать с помощью rxJava, для более подробной информации: read

...