Обработка ошибок в библиотеке подкачки с подходом Mvvm - PullRequest
0 голосов
/ 31 мая 2019

я только что начал использовать библиотеку подкачки, и код просто отлично работает, но я понятия не имел, как обрабатывать ошибки, такие как индикатор выполнения и Toast сообщение об ошибке, так что мой код это repo

public class SearchRepository extends PageKeyedDataSource<Integer, Doc> {
public static final int PAGE_SIZE = 5;
private static final int FIRST_PAGE = 1;
private static final String token = "1234";
private static final String TAG = "www";

public SearchRepository() {
}

@Override
public void loadInitial(@NonNull final LoadInitialParams<Integer> params, @NonNull final LoadInitialCallback<Integer, Doc> callback) {
    Log.e(TAG, "loadInitial: ");
    APIService apiService = RetroClass2.getAPIService();
    apiService.SeachPro(token, "name", "ascending", PAGE_SIZE, FIRST_PAGE, "")
            .enqueue(new Callback<Products>() {
                @Override
                public void onResponse(Call<Products> call, Response<Products> response) {
                    if (response.body() != null) {

                        callback.onResult(response.body().getResult().getDocs(), null, FIRST_PAGE + 1);
                    }
                }

                @Override
                public void onFailure(Call<Products> call, Throwable t) {

                }
            });
}

@Override
public void loadBefore(@NonNull final LoadParams<Integer> params, @NonNull final LoadCallback<Integer, Doc> callback) {
    Log.e(TAG, "loadBefore: ");
    APIService apiService = RetroClass2.getAPIService();
    apiService.SeachPro(token, "name", "ascending", PAGE_SIZE, params.key, "")
            .enqueue(new Callback<Products>() {
                @Override
                public void onResponse(Call<Products> call, Response<Products> response) {
                    if (response.body() != null) {
                        Integer key = (params.key > 1) ? params.key - 1 : null;
                        callback.onResult(response.body().getResult().getDocs(), key);

                    }
                }

                @Override
                public void onFailure(Call<Products> call, Throwable t) {
                }
            });
}

@Override
public void loadAfter(@NonNull final LoadParams<Integer> params, @NonNull final LoadCallback<Integer, Doc> callback) {
    Log.e(TAG, "loadAfter: ");
    APIService apiService = RetroClass2.getAPIService();
    apiService.SeachPro(token, "name", "ascending", PAGE_SIZE, params.key, "")
            .enqueue(new Callback<Products>() {
                @Override
                public void onResponse(Call<Products> call, Response<Products> response) {
                    if (response.body() != null) {

                        Integer key = response.body().getResult().getDocs().size() != 0 ? params.key + 1 : null;
                        callback.onResult(response.body().getResult().getDocs(), key);
                    }
                }

                @Override
                public void onFailure(Call<Products> call, Throwable t) {
                }
            });
}

и этомоя фабрика хранит данные

public class SearchRepoFactory extends DataSource.Factory {
private MutableLiveData<PageKeyedDataSource<Integer, Doc>> listMutableLiveData = new MutableLiveData<>();


@Override
public DataSource create() {
    SearchRepository searchRepository = new SearchRepository();
    listMutableLiveData.postValue(searchRepository);
    return searchRepository;
}

public MutableLiveData<PageKeyedDataSource<Integer, Doc>> getListMutableLiveData() {
    return listMutableLiveData;
   }
}

это моя модель представления

public class SearchViewModel extends ViewModel {
public LiveData<PagedList<Doc>> listLiveData;
private LiveData<PageKeyedDataSource<Integer, Doc>> liveData;
private static final String TAG = "yyy";

public SearchViewModel() {

    SearchRepoFactory factory = new SearchRepoFactory();
    liveData = factory.getListMutableLiveData();

    PagedList.Config config = (new PagedList.Config.Builder()).setEnablePlaceholders(false).setPageSize(SearchRepository.PAGE_SIZE).build();

    listLiveData = (new LivePagedListBuilder(factory, config)).build();
    }
}

и мой адаптер работает нормально, так что я собираюсь пропустить адаптер

и это действие

  recyclerView = findViewById(R.id.rv1);
    progressBar = findViewById(R.id.probar);
    final SearchAdapter adapter = new SearchAdapter(this);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    SearchViewModel searchViewModel = new SearchViewModel(this);

    searchViewModel.listLiveData.observe(this, new Observer<PagedList<Doc>>() {
        @Override
        public void onChanged(@Nullable PagedList<Doc> docs) {
            adapter.submitList(docs);
        }
    });
    recyclerView.setAdapter(adapter);

я скажу еще раз, что код работает нормально, когда нет ошибки, но я хочу обработать ошибку, как отсутствие соединения. Тост и скрыть индикатор выполнения, и я не хочу, чтобы пользователь общедоступный статический, я получаю ответ сервера в SearchRepository и длинный путь к пользовательскому интерфейсу.и я знаю, что мой класс именования не идеален :), так что есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...