android – 没有房间的寻呼图书馆

新的分页库的所有示例都使用了Room库,Room为我们创建了一个数据源.在我自己的情况下,我需要创建我的自定义数据源.

这是我的视图模型类中应该返回实时数据的方法.我的liveata总是返回null.

LiveData<PagedList<ApiResult>> getData(){

    LivePagedListProvider<Integer,ApiResult> p = new LivePagedListProvider<Integer,ApiResult>() {
        @Override
        protected DataSource<Integer,ApiResult> createDataSource() {
            return new DataClass();
        }

    };

    listLiveData = p.create(0,new PagedList.Config.Builder()
            .setPageSize(5) //number of items loaded at once
            .setPrefetchdistance(0)// the distance to the end of already loaded list before new data is loaded
            .build());
    return listLiveData;
}

这是Data类

public class DataClass extends TiledDataSource<ApiResult> {

private List<ApiResult> result = new ArrayList<>();

@Override
public int countItems() {
    return result.size();
}

@Override
public List<ApiResult> loadRange(int startPosition,int count) {

    Call<String> call = NetworkModule.providesWebService().makeRequest();
    call.enqueue(new Callback<String>() {
        @Override
        public void onResponse(@NonNull Call<String> call,@NonNull Response<String> response) {
            Log.i(DataClass.this.getClass().getSimpleName() + " - onResponse",String.valueOf(response));
            result = parseJson(response.body());
        }

        @Override
        public void onFailure(@NonNull Call<String> call,@NonNull Throwable t) {
            Log.i(DataClass.this.getClass().getSimpleName() + " - onFailure",t.getMessage());
        }

    });

    return result;
}

}

解决方法

我认为这有助于:
1. countItems()应该返回DataSource.COUNT_UNDEFINED
2. loadRange(int startPosition,int count):您可以直接执行查询.
所以现在你可以删除结果全局变量

另外,关闭占位符:

listLiveData = p.create(0,new PagedList.Config.Builder()
        .setPageSize(5) //number of items loaded at once
        .setPrefetchdistance(10) //Must be >0 since placeholders are off
        .setEnablePlaceholders(false)
        .build());

以下是Data Class的更新代码

public class DataClass extends TiledDataSource<ApiResult> {

@Override
public int countItems() {
 return DataSource.COUNT_UNDEFINED;
}

@Override
public List<ApiResult> loadRange(int startPosition,int count) {

 Call<String> call = NetworkModule.providesWebService().makeRequest();
 Response<String> response = call.execute();
 return parseJson(response.body());
}

您可以在此处查看示例项目:
https://github.com/brainail/.samples/tree/master/ArchPagingLibraryWithNetwork

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...