Почему библиотека подкачки перестает загружать данные после нескольких вызовов?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему библиотека подкачки перестает загружать данные после нескольких вызовов?

Сообщение Anonymous »

Я реализовал библиотеку подкачки, и она работает не совсем так, как должна. Я запрашиваю данные из github и разбиваю список репозиториев по страницам. Код работает хорошо, но после нескольких изменений поискового запроса перестает загружать данные. При отладке данные всегда загружаются хорошо. Думаю, проблема в асинхронности, но не могу понять, где искать.
Мой код:

RepoDataSource
public class RepoDataSource extends PageKeyedDataSource {
@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {
Timber.d("Initial RepoDataSource");
try {
Response response = githubService.searchRepos(query, firstNumberPage).execute();
RepoSearchResponse repoSearchResponse = response.body();
if (repoSearchResponse != null) {
List items = repoSearchResponse.getItems();
callback.onResult(items, 1, 2);
}
} catch (IOException e) {
Timber.i(e);
}
}

@Override
public void loadBefore(@NonNull LoadParams params, @NonNull LoadCallback callback) {
}

@Override
public void loadAfter(@NonNull LoadParams params, @NonNull LoadCallback callback) {
Timber.d("Fetching next page: %s", params.key);
try {
Response response = githubService.searchRepos(query, params.key).execute();
if (response.isSuccessful()) {
RepoSearchResponse repoSearchResponse = response.body();
if (repoSearchResponse != null) {
List items = repoSearchResponse.getItems();
callback.onResult(items, params.key + 1);
}
}
} catch (IOException e) {
Timber.i(e);
}
}
}


GithubApiCall

@GET("search/repositories")
Call searchRepos(@Query("q") String query, @Query("page") Integer page);


RepoDataSourceFactory

public class RepoDataSourceFactory extends DataSource.Factory {

private GithubService githubService;
private String query;

public RepoDataSourceFactory(GithubService githubService, String query) {
this.githubService = githubService;
this.query = query;
}

@NonNull
@Override
public DataSource create() {
return new RepoDataSource(githubService, query);
}
}


Метод репозитория

public class RepoRepository {
...
...
public RepoDataSourceFactory getRepoPagedFactory(String query) {
return new RepoDataSourceFactory(githubService, query);
}
}


Модель просмотра

public final class MyViewModel {
...
public MutableLiveData searchQuery = new MutableLiveData();
...
public LiveData
> getRepos() {
return Transformations.switchMap(searchQuery, query -> {
RepoDataSourceFactory factory = repository.getRepoPagedFactory(query);
return new LivePagedListBuilder(factory, pagedListConfig).build();
});
}
...
public SearchView.OnQueryTextListener listener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null && !query.trim().equals("")) {
searchQuery.postValue(query);
}
return true;
}

@Override
public boolean onQueryTextChange(String newText) {
return true;
}
};
...
}


И в моей деятельности

viewModel.getRepos().observe(this, adapter::submitList);


Подробнее здесь: https://stackoverflow.com/questions/601 ... eral-calls
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»