簡體   English   中英

轉換AmazonS3發送到RX android可觀察

[英]Transform AmazonS3 send to RX android observable

如何將這個異步調用轉換為使用RX And​​roid,並能夠將其鏈接到其他調用? 目前,我使用EventBus通知發送成功或失敗,但是我想使用RX,主要用於鏈接目的。

public void SendToAmazon(Intent i) {
    try {
        // take params from intent
        // .......................

        // Create an S3 client
        s3Client = new AmazonS3Client(new BasicAWSCredentials(MY_ACCESS_KEY_ID, MY_SECRET_KEY));
        // Set the region of your S3 bucket
        s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_CENTRAL_1));

        String newFilename = fileName+"/img.jpg";
        PutObjectRequest putObjectRequest = new PutObjectRequest(
                AmazonS3FetchParams.MY_BUCKET_NAME, newFilename, new java.io.File( fileURI) )
                .withCannedAcl(CannedAccessControlList.PublicRead)
                .withStorageClass(StorageClass.Standard);
        try {
            putObjectRequest.setGeneralProgressListener(new S3ProgressListener() {
                @Override
                public void onPersistableTransfer(PersistableTransfer persistableTransfer) {

                }

                @Override
                public void progressChanged(com.amazonaws.event.ProgressEvent progressEvent) {
                    if (progressEvent.getEventCode() == ProgressEvent.COMPLETED_EVENT_CODE) {
                        Log.d("Info", "TRANSFER finished: " + progressEvent.getBytesTransferred() + " bytes");
                        SentToS3Event sentEvent = new SentToS3Event(fileName, fileURI, position,
                                0, from, nrRetry, messageDbId, getAmazonImageUrl(fileName));
                        EventBus.getDefault().post(sentEvent);
                    } else if (progressEvent.getEventCode() == ProgressEvent.FAILED_EVENT_CODE) {
                        SentToS3Event sentEvent = new SentToS3Event(fileName, fileURI, position,
                                -1, from, nrRetry, messageDbId, getAmazonImageUrl(fileName));
                        EventBus.getDefault().post(sentEvent);
                    }
                }
            });

            PutObjectResult objectResult = s3Client.putObject(putObjectRequest);
            error = 0;
        } catch (AmazonClientException aex) {
            Log.e("Info", "AMAZON EXCEPTION ! " + aex.getMessage());
        }
    } catch (Exception e) {
        error = -1;
    }
}

`

看一下這段代碼。 我設法使它在其他情況下也可以工作。

    final PutObjectRequest putObjectRequest = new PutObjectRequest("a", "b", "c");
    Observable.create(new Observable.OnSubscribe<SomeAmazonModel>() {
        @Override
        public void call(final Subscriber<? super SomeAmazonModel> subscriber) {
            putObjectRequest.setGeneralProgressListener(new S3ProgressListener() {
                @Override
                public void onPersistableTransfer(PersistableTransfer persistableTransfer) {

                }

                @Override
                public void progressChanged(com.amazonaws.event.ProgressEvent progressEvent) {
                    if (progressEvent.getEventCode() == ProgressEvent.COMPLETED_EVENT_CODE) {
                        subscriber.onNext(new SomeAmazonModel(ProgressEvent.COMPLETED_EVENT_CODE));
                        subscriber.onCompleted();
                    } else if (progressEvent.getEventCode() == ProgressEvent.FAILED_EVENT_CODE) {
                        subscriber.onNext(new SomeAmazonModel(ProgressEvent.COMPLETED_EVENT_CODE));
                    }
                }
            });
        }
    }).subscribe(new Action1<SomeAmazonModel>() {
        @Override
        public void call(SomeAmazonModel someAmazonModel) {
            // Subscribe to above Observable and handle result
            someAmazonModel.getEventCode();
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM