Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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 Rxjava观察流作为特定时间的列表 我想做什么?_Android_Arraylist_Listener_Rx Java_Rx Java2 - Fatal编程技术网

Android Rxjava观察流作为特定时间的列表 我想做什么?

Android Rxjava观察流作为特定时间的列表 我想做什么?,android,arraylist,listener,rx-java,rx-java2,Android,Arraylist,Listener,Rx Java,Rx Java2,我有一个observable(dayListener),当我第一次订阅它时,它会从服务器发出100-300个项目(未确认可能不会返回任何内容),然后在1小时后返回1个项目。每个项目的类型为UserData 问题是什么? 我想观察(dayListner)中的项目3秒钟,并将其转换为列表并存储,然后继续观察单个项目的相同可观察值UserData 我的尝试 我不知道如何在rxjava 2中转换3秒钟的observable,因为我不能为相同的observable返回两种类型,UserData和List,

我有一个observable(dayListener),当我第一次订阅它时,它会从服务器发出100-300个项目(未确认可能不会返回任何内容),然后在1小时后返回1个项目。每个项目的类型为UserData

问题是什么? 我想观察(dayListner)中的项目3秒钟,并将其转换为列表并存储,然后继续观察单个项目的相同可观察值UserData

我的尝试
我不知道如何在rxjava 2中转换3秒钟的observable,因为我不能为相同的observable返回两种类型,UserDataList,所以我无法形成任何真正值得赞赏的解决方案,我只是rxjava2

的新手,只需使用两个不同的观测值,您就想监听两种不同类型的数据

第一个可观察到的应具有3秒的限制:

firstListObservable=userSourceObservable
.takeUntil(可观察计时器(3,时间单位秒))
.toList()

然后你可以观察到其余的值:

remainingValuesObservable=userSourceObservable
.skipUntil(可观察计时器(3,时间单位:秒))


这就是你想要的吗?

只需使用两种不同的观测值,你就想要监听两种不同类型的数据

第一个可观察到的应具有3秒的限制:

firstListObservable=userSourceObservable
.takeUntil(可观察计时器(3,时间单位秒))
.toList()

然后你可以观察到其余的值:

remainingValuesObservable=userSourceObservable
.skipUntil(可观察计时器(3,时间单位:秒))


这是您想要的吗?

您可以创建一个Pair类,并使用Zip运算符将两个结果合并为一个emmited项

class Pair {
        String a;
        Integer b;

        Pair(String a, Integer b) {
            this.a = a;
            this.b = b;
        }
    }

    @Test
    public void testZipDifferentTypes() {
        Observable.zip(obA(), obB(), Pair::new)
                .subscribe(System.out::println);
    }

    private Observable<String> obA() {
        return Observable.just("hello");
    }

    private Observable<Integer> obB() {
        return Observable.just(1);
    }
类对{
字符串a;
整数b;
对(字符串a,整数b){
这个a=a;
这个.b=b;
}
}
@试验
public void testZipDifferentTypes(){
zip(obA(),obB(),Pair::new)
.subscribe(System.out::println);
}
私有可观测obA(){
返回可见。只是(“你好”);
}
私有可观测obB(){
可观察到的回报。仅(1);
}

您可以创建一个Pair类,并使用Zip运算符将两个结果合并为一个emmited项

class Pair {
        String a;
        Integer b;

        Pair(String a, Integer b) {
            this.a = a;
            this.b = b;
        }
    }

    @Test
    public void testZipDifferentTypes() {
        Observable.zip(obA(), obB(), Pair::new)
                .subscribe(System.out::println);
    }

    private Observable<String> obA() {
        return Observable.just("hello");
    }

    private Observable<Integer> obB() {
        return Observable.just(1);
    }
类对{
字符串a;
整数b;
对(字符串a,整数b){
这个a=a;
这个.b=b;
}
}
@试验
public void testZipDifferentTypes(){
zip(obA(),obB(),Pair::new)
.subscribe(System.out::println);
}
私有可观测obA(){
返回可见。只是(“你好”);
}
私有可观测obB(){
可观察到的回报。仅(1);
}

您检查了吗?是的,我检查了该运算符,但当我在获取第一批发出的项目列表后观察单个项目时,会出现什么混乱,缓冲区是一个危险的运算符—它有时会丢弃项目—好吧,您就是做不到。
Observable
发出单一类型,因此不能同时发出列表和简单项。您有一些解决方法,比如发出单个项目的列表,或者发出类似列表或项目的列表。您检查了吗?是的,我检查了该运算符,但当我在获取第一个发出的项目列表后观察单个项目时会出现混乱,而缓冲区是一个风险运算符。它有时会丢弃项目。好吧,您根本不能。
Observable
发出单一类型,因此不能同时发出列表和简单项。你有一些变通方法,比如发出单个项目的列表,或者发出类似列表或项目的列表。感谢你给了我一个处理这种情况的好主意。感谢你给了我一个处理这种情况的好主意