Есть ли способ получить данные из вызова API один раз в модернизации? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть фрагмент в ящике навигации, а в методе onCreate есть вызов API модернизации для получения некоторых данных с сервера.

ApiInterface apiService = ApiClient.getClient(false).create(ApiInterface.class);
    Call<MoviesWrapper> call = apiService.getMovies("upcoming", PreferencesHelper.getLanguage(context), "US");
    call.enqueue(new Callback<MoviesWrapper>() {
        @Override
        public void onResponse(Call<MoviesWrapper> call, Response<MoviesWrapper> response) {
            MoviesWrapper moviesWrapper = response.body();
            assert moviesWrapper != null;
            final HomeAdapter moviesAdapter = new HomeAdapter(getContext(), moviesWrapper.getMovies(), null, true);
            moviesRv.setAdapter(moviesAdapter);
            progressBar1.setVisibility(View.GONE);
        }

        @Override
        public void onFailure(Call<MoviesWrapper> call, Throwable t) {
            Log.e(Constants.STRINGS.FAILURE, t.toString());
        }
    });

Моя проблема - каждый раз, когда я иду во фрагмент,дооснащение получает данные с сервера.Есть ли способ кешировать данные при модификации и не делать вызов API каждый раз?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Дооснащение не может кэшировать извлеченные данные самостоятельно.Лучший способ - извлечь их, а затем сохранить в локальной базе данных, используя, например, Room Persistence Library или Realm.

И стратегия должна выглядеть следующим образом:

  1. Проверьте, есть ли данные в локальной базе данныхсуществует.
  2. Если не получить их и сохранить в локальной базе данных
  3. Загрузить данные из локальной базы данных и отобразить на экране

Также вы должны создать классы, отвечающие заэта функция.И реализуйте callback / listener, который будет предоставлять данные из этих классов вашему фрагменту.Потому что реализация вызовов API в Activity или Fragment - плохой выбор.Это создает огромный беспорядок в разработке.

0 голосов
/ 02 октября 2018

Если ваши данные не изменяются из API, вы можете сохранить их в SharedPreferences или локальной базе данных или сериализовать данные в ObjectSerializer (ByteArrayInputStream / ByteArrayOutputStream. Если данные изменяются, вы можете реализовать push-уведомление Firebase кактолчок наступит, и тогда вы сможете получить доступ к этому API, и вы получите эти данные.

0 голосов
/ 02 октября 2018

Вы можете вызвать API в действии и передать ответ на фрагмент, это предотвратит рекурсивный вызов каждый раз для фрагмента.

Вы можете поделиться некоторым кодом, я предоставлю подробное решение.

...