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
Android 在flowable中区分初始调用和下一次发射_Android_Rx Java_Rx Java2 - Fatal编程技术网

Android 在flowable中区分初始调用和下一次发射

Android 在flowable中区分初始调用和下一次发射,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,我目前订阅了一个使用RxJava2的可流动方法 假设我有一个订阅的方法 public Flowable<UploadStatus> getStatusChanges() 公共可流动getStatusChanges() 我将第一次调用从数据库加载所有项目状态,因此基本上将加载我的recyclerview上的所有项目。 但一旦我订阅了,我将继续从该流媒体获取事件。我将从一个已确定的项目中获取单个更改,例如,已确定的项目已更改 如何将单个更改与初始加载区别开来?假设将结果封装到如下类

我目前订阅了一个使用RxJava2的可流动方法 假设我有一个订阅的方法

public Flowable<UploadStatus> getStatusChanges() 
公共可流动getStatusChanges()
我将第一次调用从数据库加载所有项目状态,因此基本上将加载我的recyclerview上的所有项目。 但一旦我订阅了,我将继续从该流媒体获取事件。我将从一个已确定的项目中获取单个更改,例如,已确定的项目已更改


如何将单个更改与初始加载区别开来?

假设将结果封装到如下类中:

class Wrapper {
    public boolean firstLoad;
    public UploadStatus uploadStatus;

    //constructor omitted for brevity 
}
getStatusChanges()
    .map(item -> Wrapper(false, item))
    .startWith(Wrapper(true, null)
    .subscribe(result -> {
        if(result.firstLoad) {
            //show spinner
        } else {
            //handle normaly
        }
    })
你可以这样做:

class Wrapper {
    public boolean firstLoad;
    public UploadStatus uploadStatus;

    //constructor omitted for brevity 
}
getStatusChanges()
    .map(item -> Wrapper(false, item))
    .startWith(Wrapper(true, null)
    .subscribe(result -> {
        if(result.firstLoad) {
            //show spinner
        } else {
            //handle normaly
        }
    })
另一种方法(根据我的回答改编)是使用publish

getStatusChanges().publish(items -> items.first().map(item -> Wrapper(true, item)).concatWith(items.skip(1).map(item -> Wrapper(false, item))))

您不使用的原因是什么?DiffUtils它用于不同的用例,用于更新recyclerview本身。我真正想让它区分最初的加载和之后的更新。我的想法是,当我订阅FlowTable时,第一次显示加载条或其他内容,然后我会更新recyclerview上更改的项目,但我想知道FlowTable何时完成第一次加载。第二,请仔细查看我将使用的内容,谢谢