转换 AmazonS3 发送到 RX android 可观察
Transform AmazonS3 send to RX android observable
我将如何转换此异步调用以使用 RX Android 并具有能力
将它链接到其他电话?
目前我使用 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();
}
});
我将如何转换此异步调用以使用 RX Android 并具有能力 将它链接到其他电话? 目前我使用 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();
}
});