Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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 在RxJava2中遍历可观察列表_Android_Rx Java2 - Fatal编程技术网

Android 在RxJava2中遍历可观察列表

Android 在RxJava2中遍历可观察列表,android,rx-java2,Android,Rx Java2,我正在用RxJava将一些照片上传到云服务。我仅限于云服务的API,因此我可以为我想要上传的每张照片获得一个可流动的对象 我使用一个zip操作符来组合所有对象(我将Flowables转换为Obseravles)。这是我的代码: private void startUpload(ArrayList<InCartProductModel> printableProducts) { // Create a list of Observables List&l

我正在用RxJava将一些照片上传到云服务。我仅限于云服务的API,因此我可以为我想要上传的每张照片获得一个可流动的对象

我使用一个zip操作符来组合所有对象(我将Flowables转换为Obseravles)。这是我的代码:

private void startUpload(ArrayList<InCartProductModel> printableProducts) {
        // Create a list of Observables
        List<Observable<Progress<FileLink>>> observables = new ArrayList<>();

        for (int i = 0; i < printableProducts.size(); i++) {
            ArrayList<SelectablePhoto> productPhotos = printableProducts.get(i).getSelectablePhotos();

            for (int j = 0; j < productPhotos.size(); j++) {
                observables.add(getObservable(productPhotos.get(j)));
            }
        }

        Observable<PhotosZipObject> observable = Observable.zip(observables, args -> {
            PhotosZipObject zipObject = new PhotosZipObject();
            zipObject.results = args;
            return zipObject;
        });

        ArrayList<FileLink> arrayList = new ArrayList<>();
        observable
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(zipObject -> {
                    List<FileLink> data = (List<FileLink>) (Object) Arrays.asList(zipObject.results);
                    arrayList.addAll(data);
                    uploadDialog.dismiss();
                }, throwable -> {
                    Toast.makeText(this, "הייתה בעיה בטעינת הנתונים. אנא נסה שנית", Toast.LENGTH_SHORT).show();
                    Log.i("SplashScreenActivity", "error while posting order: " + throwable);
                    uploadDialog.dismiss();
                });

    }


    class PhotosZipObject {
        Object[] results;
    }
private void startupboad(ArrayList可打印产品){
//创建一个可观察的列表
列表可观察对象=新的ArrayList();
对于(int i=0;i{
PhotosZipObject zipObject=新的PhotosZipObject();
zipObject.results=args;
返回zipObject;
});
ArrayList ArrayList=新的ArrayList();
可观察
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(zipObject->{
列表数据=(列表)(对象)数组.asList(zipObject.results);
arrayList.addAll(数据);
uploadDialog.disclose();
},可丢弃->{
Toast.makeText(这是“Toast.LENGTH”.show());
Log.i(“SplashScreenActivity”,“发布订单时出错:“+throwable”);
uploadDialog.disclose();
});
}
类PhotosZipObject{
对象[]结果;
}
由于某些原因,如果有超过24张照片,我的方法就不起作用(应用程序崩溃)

有没有其他方法可以达到同样的效果


感谢

什么是堆栈竞争?@Fred Throwing OutOfMemoryError“未能分配68559200字节的分配,25165824个空闲字节和56MB,直到OOM,最大允许占用空间167497024,增长限制201326592”这有点像是瞎猜,但可能你同时上传了太多照片。你能试着用计算调度器代替io吗?计算调度程序的线程数有限(仅与设备中存在的内核数相同)。也许这会限制内存中的内容数量。不过上传速度会慢一些。是的,这正是问题所在。我试图手动处理这件事,并将整个事情分成几部分,但我遇到了另一个错误。。。我想试试你的方法,我会更新的