我有多个图片的路径(URI /字符串)。将此值传递给" 。S3PutObjectTask()执行(URI); "我想将所有这些图像上传到Amazon S3。 有人可以帮助我如何传递这些URI以及如何上传多个图像。
android upload image to amazon storage with image path
中发现了类似的日志cat错误提前致谢
public class AWSUpload extends Activity {
private AmazonS3Client s3Client = new AmazonS3Client(
new BasicAWSCredentials(Constants.ACCESS_KEY_ID,
Constants.SECRET_KEY));
String uri1a, uri2a, uri3a, uri4a;
int i;
private static final int PHOTO_SELECTED = 1;
Button b1;
TextView t1, t2, t3, t4;
ImageView iv1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inspectionreport);
s3Client.setRegion(Region.getRegion(Regions.US_WEST_2));
Intent gettingURI = getIntent();
uri1a = gettingURI.getStringExtra("uri1");
uri2a = gettingURI.getStringExtra("uri2");
uri3a = gettingURI.getStringExtra("uri3");
uri4a = gettingURI.getStringExtra("uri4");
b1 = (Button) findViewById(R.id.button1);
t1 = (TextView) findViewById(R.id.textView1);
t2 = (TextView) findViewById(R.id.textView2);
t3 = (TextView) findViewById(R.id.textView3);
t4 = (TextView) findViewById(R.id.textView4);
iv1 = (ImageView) findViewById(R.id.imageView1);
Uri img1URI = Uri.parse(uri1a);
Uri img2URI = Uri.parse(uri2a);
Uri img3URI = Uri.parse(uri3a);
Uri img4URI = Uri.parse(uri4a);
t1.setText(uri1a);
t2.setText(uri2a);
t3.setText(uri3a);
t4.setText(uri4a);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (i = 1; i <= 4; i++) {
if (i == 1) {
Uri selectedImage1 = Uri.parse(uri1a);
new S3PutObjectTask().execute(selectedImage1);
} else if (i == 2) {
Uri selectedImage2 = Uri.parse(uri2a);
new S3PutObjectTask().execute(selectedImage2);
} else if (i == 3) {
Uri selectedImage3 = Uri.parse(uri3a);
new S3PutObjectTask().execute(selectedImage3);
} else if (i == 4) {
Uri selectedImage4 = Uri.parse(uri4a);
new S3PutObjectTask().execute(selectedImage4);
} else {
Intent returnIntent = new Intent(AWSUpload.this,
ProductImagesss.class);
startActivity(returnIntent);
}
}
}
});
}
// This method is automatically called by the image picker when an image is
// selected.
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case PHOTO_SELECTED:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
new S3PutObjectTask().execute(selectedImage);
}
}
}
// Display an Alert message for an error or failure.
protected void displayAlert(String title, String message) {
AlertDialog.Builder confirm = new AlertDialog.Builder(this);
confirm.setTitle(title);
confirm.setMessage(message);
confirm.setNegativeButton(AWSUpload.this.getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
confirm.show().show();
}
protected void displayErrorAlert(String title, String message) {
AlertDialog.Builder confirm = new AlertDialog.Builder(this);
confirm.setTitle(title);
confirm.setMessage(message);
confirm.setNegativeButton(AWSUpload.this.getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AWSUpload.this.finish();
}
});
confirm.show().show();
}
private class S3PutObjectTask extends AsyncTask<Uri, Void, S3TaskResult> {
ProgressDialog dialog;
protected void onPreExecute() {
dialog = new ProgressDialog(AWSUpload.this);
dialog.setMessage(AWSUpload.this.getString(R.string.uploading));
dialog.setCancelable(false);
dialog.show();
}
protected S3TaskResult doInBackground(Uri... uris) {
if (uris == null || uris.length != 1) {
return null;
}
// The file location of the image selected.
Uri selectedImage = uris[0];
ContentResolver resolver = getContentResolver();
String fileSizeColumn[] = { OpenableColumns.SIZE };
Cursor cursor = resolver.query(selectedImage, fileSizeColumn, null,
null, null);
cursor.moveToFirst();
int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
String size = null;
if (!cursor.isNull(sizeIndex)) {
size = cursor.getString(sizeIndex);
}
cursor.close();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(resolver.getType(selectedImage));
if (size != null) {
metadata.setContentLength(Long.parseLong(size));
}
S3TaskResult result = new S3TaskResult();
// Put the image data into S3.
try {
// s3Client.createBucket(Constants.getPictureBucket());
PutObjectRequest por = new PutObjectRequest("mybucket",
Constants.PICTURE_NAME,
resolver.openInputStream(selectedImage), metadata);
s3Client.putObject(por);
} catch (Exception exception) {
result.setErrorMessage(exception.getMessage());
}
return result;
}
protected void onPostExecute(S3TaskResult result) {
dialog.dismiss();
if (result.getErrorMessage() != null) {
displayErrorAlert(
AWSUpload.this.getString(R.string.upload_failure_title),
result.getErrorMessage());
}
}
}
private class S3TaskResult {
String errorMessage = null;
Uri uri = null;
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public Uri getUri() {
return uri;
}
public void setUri(Uri uri) {
this.uri = uri;
}
}
}
我的日志猫:
E/AndroidRuntime(18015): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime(18015): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(18015): at android.os.AsyncTask$3.done(AsyncTask.java:299)
E/AndroidRuntime(18015): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
E/AndroidRuntime(18015): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
E/AndroidRuntime(18015): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
E/AndroidRuntime(18015): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
E/AndroidRuntime(18015): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
E/AndroidRuntime(18015): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
E/AndroidRuntime(18015): at java.lang.Thread.run(Thread.java:838)
E/AndroidRuntime(18015): Caused by: java.lang.NullPointerException
E/AndroidRuntime(18015): at com.cbazaarqc.AWSUpload$S3PutObjectTask.doInBackground(AWSUpload.java:229)
E/AndroidRuntime(18015): at com.cbazaarqc.AWSUpload$S3PutObjectTask.doInBackground(AWSUpload.java:1)
E/AndroidRuntime(18015): at android.os.AsyncTask$2.call(AsyncTask.java:287)
E/AndroidRuntime(18015): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
E/AndroidRuntime(18015): ... 4 more
E/WindowManager(18015): Activity com.cbazaarqc.AWSUpload has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{420a16e0 V.E..... R......D 0,0-684,192} that was originally added here
E/WindowManager(18015): android.view.WindowLeaked: Activity com.cbazaarqc.AWSUpload has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{420a16e0 V.E..... R......D 0,0-684,192} that was originally added here
E/WindowManager(18015): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:409)
E/WindowManager(18015): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:218)
E/WindowManager(18015): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
E/WindowManager(18015): at android.app.Dialog.show(Dialog.java:281)
E/WindowManager(18015): at com.cbazaarqc.AWSUpload$S3PutObjectTask.onPreExecute(AWSUpload.java:211)
E/WindowManager(18015): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
E/WindowManager(18015): at android.os.AsyncTask.execute(AsyncTask.java:534)
E/WindowManager(18015): at com.cbazaarqc.AWSUpload.onCreate(AWSUpload.java:93)
E/WindowManager(18015): at android.app.Activity.performCreate(Activity.java:5122)
E/WindowManager(18015): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
E/WindowManager(18015): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
E/WindowManager(18015): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
E/WindowManager(18015): at android.app.ActivityThread.access$600(ActivityThread.java:156)
E/WindowManager(18015): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
E/WindowManager(18015): at android.os.Handler.dispatchMessage(Handler.java:99)
E/WindowManager(18015): at android.os.Looper.loop(Looper.java:153)
E/WindowManager(18015): at android.app.ActivityThread.main(ActivityThread.java:5297)
E/WindowManager(18015): at java.lang.reflect.Method.invokeNative(Native Method)
E/WindowManager(18015): at java.lang.reflect.Method.invoke(Method.java:511)
E/WindowManager(18015): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
E/WindowManager(18015): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
E/WindowManager(18015): at dalvik.system.NativeStart.main(Native Method)