Шаблон изменения данных Livedata - PullRequest
1 голос
/ 15 февраля 2020

У меня есть сомнение. Если у меня есть метод, который выполняет асинхронный вызов API и преобразует его результаты в объект liveata, а в другом месте я обновляю свое окно повторного просмотра при изменении данных, тогда каждый раз, когда вызов этого метода будет обновите программу повторного просмотра или, например: если URL-адрес останется прежним, то он не будет обновлять обзор повторного просмотра; помогите, пожалуйста. Вот код для наблюдения данных в методе Mainactivity onCreate.

 JsonViewModel model = new ViewModelProvider(this).get(JsonViewModel.class);
    model.getData("top_rated").observe(this, data -> {
        mRecyclerView.setAdapter(new MovieRecyclerViewAdapter(this,data));
    });

Вот класс JsonViewModel

public class JsonViewModel extends AndroidViewModel {

private JsonLivedata data;
public JsonViewModel(@NonNull Application application) {
    super(application);
    data=new JsonLivedata();
}

public LiveData<List<Movie>> getData(String path) {
    data.loadData(path);
    return data;
}
}

Вот класс JsonLivedata

public class JsonLivedata extends LiveData<List<Movie>> {
private static final String TAG = "JsonLivedata";

public JsonLivedata() {

}

public void loadData(String path){
    Log.d(TAG, "loadData: Called");
    new AsyncTask<String,Void,List<Movie>>(){
        @Override
        protected List<Movie> doInBackground(String... path) {
            List<Movie> allTopMovies= JsonResponseFetcher.makeAsyncQueryForMovies(path[0]);
            return allTopMovies;
        }

        @Override
        protected void onPostExecute(List<Movie> movies) {
            setValue(movies);
        }
    }.execute(path);
}

}

И вот метод, который вызывает метод livedata loaddata

changeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            model.getData("popular");
        }
    });

Или я делаю что-то неправильно. Может кто-нибудь предложить

1 Ответ

0 голосов
/ 15 февраля 2020

Сначала создайте экземпляр адаптера и установите RecyclerView

JsonViewModel model = new ViewModelProvider(this).get(JsonViewModel.class);
MovieRecyclerViewAdapter movieRecyclerViewAdapter = new MovieRecyclerViewAdapter(this, dataList)
mRecyclerView.setAdapter(movieRecyclerViewAdapter);

Затем сделайте это при изменении данных

    model.getData("top_rated").observe(this, data -> {
       dataList.clear();
       dataList.addAll(data);
       movieRecyclerViewAdapter.notifyDataSetChanged();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...