Библиотека подкачки продолжает добавлять данные при использовании pagekeyeddatasource с видом recycler. Как я могу это остановить?
Я хочу выполнить разбиение на страницы и реализовал его . Он работает, но точные пааги продолжают повторяться.
public class ScheduleDataSource extends PageKeyedDataSource<Long,GeneralMatchItem> { public void loadInitial (@NonNull LoadInitialParams<Long> params, @NonNull LoadInitialCallback<Long, GeneralMatchItem> callback){ total_items = response_obj.getInt("total_items"); // This is the total items received fromthe response .... .... callback.onResult(internationalScheduledMatchItemsList,null, 2L); } public void loadAfter(@NonNull LoadParams<Long> params, @NonNull LoadCallback<Long, GeneralMatchItem> callback) { .... long nextKey = (params.key == total_items)? null : params.key+1; // This throws null pointer when the pages are 12/12 callback.onResult(tempList,nextKey); } ... }
Что я уже пробовал:
Я попытался отследить позицию вручную, как это было упомянуто в приведенном выше блоке кода:
Поскольку я продолжаю прокручивать, то ключ добавляется до тех пор,пока он не достигнет 12, то есть 12/12 complete, и внезапно я получаю исключение нулевого указателя
D/ScheduleDataSource: KEY 11AND TOTAL ITEMS :12
Я учился из этого урока и осуществил большую его часть. Но я не могу избавиться от этой ошибки .
Нулевой указатель, который я получаю, это :
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.xyz, PID: 5794 java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference at com.xyz.homescreen_new.utilities.schecdule_util.ScheduleDataSource$2.onResponse(ScheduleDataSource.java:252) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Я не в состоянии понять, что же здесь не так. Пожалуйста помочь .
ТИА . :)
David Crow
Вы смотрели на строку 252 из ScheduleDataSource.java
?
Member 12731696
Привет Дэвид
Да, в этой строке я создаю длинное значение ,то есть ключ
long nextKey = (params.key == total_items)? null : params.key+1;
David Crow
Так что вы проверили, чтобы увидеть, если params
является null
?
Почему вы назначаете null
к nextKey
а не что-то вроде 0
или -1
?
Member 12731696
Я следовал этому учебнику. Я пытался реализовать это таким образом..
https://proandroiddev.com/8-steps-to-implement-paging-library-in-android-d02500f7fffe
David Crow
Поэтому, когда nextkey
равняется null
, longValue
должно быть, ему звонят изнутри onResult()
, который бросает исключение.
Чтобы проверить это, измените эту строку кода на:
long nextKey = (params.key == total_items) ? 11 : params.key + 1;