Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Amazon web services RXJava2+;AWS SDK:从AWS S3 TransferListener调用onError时获取UndeliverableException_Amazon Web Services_Amazon S3_Rx Android_Rx Java2 - Fatal编程技术网

Amazon web services RXJava2+;AWS SDK:从AWS S3 TransferListener调用onError时获取UndeliverableException

Amazon web services RXJava2+;AWS SDK:从AWS S3 TransferListener调用onError时获取UndeliverableException,amazon-web-services,amazon-s3,rx-android,rx-java2,Amazon Web Services,Amazon S3,Rx Android,Rx Java2,我使用RXJava(RXAndroid)来序列化一组awss3传输请求 我正在使用AWS TransferUtility,它提供了一个异步TransferListener,可以获取进度和错误通知 我很难传播这些错误 我的代码是这样的 for (final String subscription : subscriptions) { Observable<String> thisObservable = new Observable<String>

我使用RXJava(RXAndroid)来序列化一组awss3传输请求

我正在使用AWS TransferUtility,它提供了一个异步TransferListener,可以获取进度和错误通知

我很难传播这些错误

我的代码是这样的

    for (final String subscription : subscriptions) {

        Observable<String> thisObservable = new Observable<String>() {
            @Override
            protected void subscribeActual(Observer<? super String> observer) {
                new S3Loader(subscription, observer).load();
                // The S3Loader uses AWS TransferListener to call onNext and onError of the observers
            }
        };

        observables.add(thisObservable);

        Log.v(this, "Added %s", subscription);

    }

    Observable.concat(observables)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<String>() {

                     @Override
                     public void onSubscribe(@NonNull Disposable d) {
                         Log.v(OperationalStatusFragment.this, "Subscribed...");
                     }

                     @Override
                     public void onNext(@NonNull String s) {
                         Log.v(OperationalStatusFragment.this, "Started weather operation \"%s\"", s);
                     }

                     @Override
                     public void onError(@NonNull Throwable e) {
                         Log.e(OperationalStatusFragment.this, "An error happened...");
                     }

                     @Override
                     public void onComplete() {
                         Log.v(OperationalStatusFragment.this, "Completed...");

                     }
                 }
    );
编辑2:以下是S3loader.load()的外观:

public void load() {

    observer.onNext(subscription);

        AmazonS3Client s3Client = new AmazonS3Client();
        TransferUtility transferUtility = new TransferUtility(s3Client, context);
        TransferObserver observer = transferUtility.download(BUCKET, subscription, file);
        observer.setTransferListener(new TransferListener() {

            @Override
            public void onStateChanged(int id, TransferState state) {

                if (state == TransferState.COMPLETED) {
                    observer.onComplete();
                } else if (state == TransferState.FAILED) {
                    observer.onError(new IOException("An error happened"));
                } 
            }

            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

            }

            @Override
            public void onError(int id, Exception e) {

                observer.onError(e);
            }
        });

}

显示实际的stacktrace以及如何实现S3Loader将非常有用。还有,为什么不使用
创建
?@akarnodkd,我添加了堆栈跟踪和加载代码。我没有使用create,因为我使用了
concat
。我不确定我是否也应该有一个
create
。RxJava的版本是什么?也请使用
observatable。create
遵守observatable协议。@akarnokd,这是RXJava2。你能不能在“可观察的。创造一个尊重可观察的协议”上说一点?
public void load() {

    observer.onNext(subscription);

        AmazonS3Client s3Client = new AmazonS3Client();
        TransferUtility transferUtility = new TransferUtility(s3Client, context);
        TransferObserver observer = transferUtility.download(BUCKET, subscription, file);
        observer.setTransferListener(new TransferListener() {

            @Override
            public void onStateChanged(int id, TransferState state) {

                if (state == TransferState.COMPLETED) {
                    observer.onComplete();
                } else if (state == TransferState.FAILED) {
                    observer.onError(new IOException("An error happened"));
                } 
            }

            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

            }

            @Override
            public void onError(int id, Exception e) {

                observer.onError(e);
            }
        });

}