Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在PositionDataSource中未调用loadInitial方法<;项目>;_Java_Android_Null_Paging_Android Jetpack - Fatal编程技术网

Java 在PositionDataSource中未调用loadInitial方法<;项目>;

Java 在PositionDataSource中未调用loadInitial方法<;项目>;,java,android,null,paging,android-jetpack,Java,Android,Null,Paging,Android Jetpack,我在Java中从分页库实现PositionDataSource,并得到一个问题,PositionDataSource的子类的构造函数正在被调用,但在此之后loadInitial方法没有被调用 public HistoryPositionalDataSource(List<CallTable> callLogs) { this.callLogs = callLogs; Log.d("PaginationDataSource", "Constructor"); } @O

我在Java中从分页库实现PositionDataSource,并得到一个问题,PositionDataSource的子类的构造函数正在被调用,但在此之后loadInitial方法没有被调用

public HistoryPositionalDataSource(List<CallTable> callLogs)
{
    this.callLogs = callLogs;
    Log.d("PaginationDataSource", "Constructor");
}

@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {
    Log.d("PaginationDataSource", "loadInitial");
    if (callLogs!=null && !callLogs.isEmpty())
    {
        int totalCount = computeCount();
        int position = computeInitialLoadPosition(params, totalCount);
        int loadSize = computeInitialLoadSize(params, position, totalCount);
        callback.onResult(loadRangeInternal(position, loadSize), position, totalCount);
    }
}

@Override
public void loadRange(@NonNull LoadRangeParams params, @NonNull LoadRangeCallback callback) {
    callback.onResult(loadRangeInternal(params.startPosition, params.loadSize));
}
公共历史位置数据源(列出调用日志)
{
this.callLogs=callLogs;
Log.d(“分页数据源”、“构造函数”);
}
@凌驾
public void loadInitial(@NonNull LoadInitialParams params,@NonNull LoadInitialCallback callback){
Log.d(“PaginationDataSource”、“loadInitial”);
if(callLogs!=null&&!callLogs.isEmpty())
{
int totalCount=computeCount();
int position=computeInitialLoadPosition(参数,totalCount);
int loadSize=computeInitialLoadSize(参数、位置、总数);
onResult(loadRangeInternal(位置,loadSize),位置,totalCount);
}
}
@凌驾
public void loadRange(@NonNull LoadRangeParams params,@NonNull LoadRangeCallback回调){
onResult(loadRangeInternal(params.startPosition,params.loadSize));
}
这是我的页面列表配置

private void init() {
    pagedListConfig = (new PagedList.Config.Builder()).setEnablePlaceholders(true)
            .setInitialLoadSizeHint(Integer.MAX_VALUE).setPageSize(Integer.MAX_VALUE).build();
    Executor executor = Executors.newFixedThreadPool(3);
    List<CallTable> listLogs = getCallLogs(context);
    historyDataSourceFactory = new HistoryDataSourceFactory(listLogs);
    LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(historyDataSourceFactory, pagedListConfig);
    pagedCallLogs =  livePagedListBuilder
            .setFetchExecutor(executor)
            .build();
}
private void init(){
pagedListConfig=(新建PagedList.Config.Builder()).setEnablePlaceholders(true)
.setInitialLoadSizeHint(Integer.MAX_值).setPageSize(Integer.MAX_值).build();
Executor Executor=Executors.newFixedThreadPool(3);
List listLogs=getCallLogs(上下文);
historyDataSourceFactory=新的historyDataSourceFactory(listLogs);
LivePagedListBuilder LivePagedListBuilder=新的LivePagedListBuilder(historyDataSourceFactory,pagedListConfig);
pagedCallLogs=livePagedListBuilder
.setFetchExecutor(执行者)
.build();
}
工厂等级:

public class HistoryDataSourceFactory extends DataSource.Factory {

private static final String TAG = HistoryDataSourceFactory.class.getSimpleName();
private HistoryPositionalDataSource historyPositionalDataSource;

public HistoryDataSourceFactory(List<CallTable> callLogs)
{
    if (callLogs!=null && !callLogs.isEmpty())
    {
        Log.d("PaginationFactory", "NotNullLogs");
        historyPositionalDataSource = new HistoryPositionalDataSource(callLogs);
    }
}

@Override
public DataSource create() {
    return historyPositionalDataSource;
}
}
公共类HistoryDataSourceFactory扩展DataSource.Factory{
私有静态最终字符串标记=HistoryDataSourceFactory.class.getSimpleName();
私有HistoryPositionDataSource HistoryPositionDataSource;
公共历史数据源工厂(列出调用日志)
{
if(callLogs!=null&&!callLogs.isEmpty())
{
Log.d(“分页工厂”、“NotNullLogs”);
HistoryPositionDataSource=新的HistoryPositionDataSource(调用日志);
}
}
@凌驾
公共数据源创建(){
返回HistoryPositionDataSource;
}
}
我的getPagedCallLogs方法:

public synchronized LiveData<PagedList<CallTable>> getPagedCallLogs() {

    if (pagedCallLogs!=null && pagedCallLogs.getValue()!=null)
    {
        Log.d("PagingGetData", "Done");
        return pagedCallLogs;
    }
    else
    {
        Log.d("PagingGetData", "Null");
        return null;
    }
}
public synchronized LiveData getPagedCallLogs(){
if(pagedCallLogs!=null&&pagedCallLogs.getValue()!=null)
{
Log.d(“PagingGetData”、“完成”);
返回pagedCallLogs;
}
其他的
{
Log.d(“PagingGetData”、“Null”);
返回null;
}
}
日志图像如下所示。

已设置加载大小和偏移量 通过
PagedList.Config
,您无需自己计算负载范围

更改
loadInitial
功能

@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {
    Log.d("PaginationDataSource", "loadInitial");
    if (callLogs!=null && !callLogs.isEmpty())
    {
        callback.onResult(loadRangeInternal(0, params.requestedLoadSize), 0);
    }
}
编辑: 也试试这个配置

 PagedList.Config config =
            new PagedList.Config.Builder()
                    .setPageSize(50)
                    .setEnablePlaceholders(false)
                    .setPrefetchDistance(25)
                    .build();
Edit2:
尝试将扩展名从
DataSource.Factory
更改为
DataSource.Factory
并将
positiondatasource
更改为
positiondatasource
经过太多的努力,我终于能够解决我的问题了。问题在于我的getPagedCallLog方法。 我写道:

public synchronized LiveData getPagedCallLogs(){
if(pagedCallLogs!=null&&pagedCallLogs.getValue()!=null)
{
Log.d(“PagingGetData”、“完成”);
返回pagedCallLogs;
}
其他的
{
Log.d(“PagingGetData”、“Null”);
返回null;
}
}
我当时正在使用Google I/O'18,他在其中说loadInitial由页面列表调用,然后我意识到在我的情况下它没有被调用。删除pagedCallLogs.getValue()后,它工作正常=这是我愚蠢的错误

现在看起来是这样的:

public synchronized LiveData<PagedList<CallTable>> getPagedCallLogs() {
if (pagedCallLogs!=null)
{
    Log.d("PagingGetData", "Done");
    return pagedCallLogs;
}
else
{
    Log.d("PagingGetData", "Null");
    return null;
}
}
public synchronized LiveData getPagedCallLogs(){
如果(pagedCallLogs!=null)
{
Log.d(“PagingGetData”、“完成”);
返回pagedCallLogs;
}
其他的
{
Log.d(“PagingGetData”、“Null”);
返回null;
}
}

loadInitial仍然没有被调用我已经用我的PageListConfig更新了问题。@FerozKhan try提供了configNothing。@FerozKhan是
callLogs
中有对象吗?是的,我已经在日志中检查了它们。此外,loadinitial中的Log.d位于if语句之外,如果调用了loadinitial,则必须显示它。
public synchronized LiveData<PagedList<CallTable>> getPagedCallLogs() {
if (pagedCallLogs!=null)
{
    Log.d("PagingGetData", "Done");
    return pagedCallLogs;
}
else
{
    Log.d("PagingGetData", "Null");
    return null;
}
}