1
Wie würde ich diesen asynchronen Anruf zu RX Android zu transformieren und die Fähigkeit haben, um es auf andere Anrufe zu ketten? Momentan verwende ich EventBus, um zu informieren, dass Senden erfolgreich oder fehlgeschlagen ist, aber ich möchte RX hauptsächlich für Verkettungszwecke verwenden.Transform AmazonS3 senden an RX android beobachtbar
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;
}
}
`
Dies funktioniert, aber können Sie ein weiteres Detail hinzufügen, wie Sie nächste Anrufe in RX-Weise verketten? – miroslavign
Können Sie es ein wenig erklären "Kette nächste Anrufe"? Möchten Sie einen weiteren Anruf ausführen, nachdem der erste erfolgreich war? Oder führen Sie jedes Mal einen Anruf aus, wenn etwas passiert ist, z. "Knopf drücken". Oder führen Sie mehrere Anrufe nacheinander aus? – Rzodkiewka
Es tut mir leid, irgendwie meinen Weg mit RX, so dass meine Terminologie möglicherweise nicht die richtige ist. Was ich also brauche, ist, dass ich nach der asynchronen Ausführung von S3 send mehr RX-Aufrufe ausführen muss. Bitte sehen Sie sich an: https://github.com/BoltsFramework/Bolts-Android#chaining-tasks-together Das ist etwas, was ich mit RX erreichen möchte. – miroslavign