Member 12731696 Ответов: 1

Библиотека подкачки продолжает добавлять данные при использовании 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;

1 Ответов

Рейтинг:
0

Justin Baek

изменить long nextKey -> Long nextKey :-)