Android 安卓亚马逊S3上传崩溃
我正在试图找出在Amazon S3 bucket上上传时导致此崩溃的原因 日志为:Android 安卓亚马逊S3上传崩溃,android,amazon-web-services,amazon-s3,Android,Amazon Web Services,Amazon S3,我正在试图找出在Amazon S3 bucket上上传时导致此崩溃的原因 日志为: Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.amazonaws.mobileconnectors.s3.transferutility.TransferService$NetworkInfoReceiver.isNetworkConnected()' on a null
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.amazonaws.mobileconnectors.s3.transferutility.TransferService$NetworkInfoReceiver.isNetworkConnected()' on a null object reference
at com.amazonaws.mobileconnectors.s3.transferutility.TransferService.execCommand(TransferService.java:287)
at com.amazonaws.mobileconnectors.s3.transferutility.TransferService$UpdateHandler.handleMessage(TransferService.java:224)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.os.HandlerThread.run(HandlerThread.java:61)
我的代码有问题吗
public AmazonTransferUtility uploadFileToAmazonS3(String data, Date date){
generateTextFileFromString(data, date);
File jsonFile = new File(getDataPath(), textName);
TransferObserver observer = transferUtility.upload(
textBucketName,
mUUID + File.separator + date.getTime() + textName ,
jsonFile
);
mListener.onAsyncStart();
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
try {
if (state.toString().equals("COMPLETED")) {
deleteFile(textName);
if (mListener != null) {
JSONObject result = new JSONObject();
result.put("result", state.toString());
mListener.onAsyncSuccess(result);
}
}
else if (state.toString().equals("FAILED") ||
state.toString().equals("UNKNOWN")
){
mListener.onAsyncFail(id, state.toString());
}
else{
Log.i(TAG, "S3 TransferState :" + state.toString());
}
}catch (JSONException e){
Log.e(TAG, e.getLocalizedMessage());
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
if (bytesCurrent == bytesTotal){
Log.i(TAG, "Completed");
}
else{
Log.i(TAG, "Current bytes: " + bytesCurrent + " Of bytesTotal : " + bytesTotal);
}
}
@Override
public void onError(int id, Exception ex) {
mListener.onAsyncFail(id,ex.getMessage());
}
});
return this;
}
如果有的话,我怎样才能抓住这个错误,使我的应用程序停止崩溃,只是取消我的上传任务
顺便说一句
该崩溃是间歇性的,同步成功率为1/5这似乎不是您正在做的事情,而是在AWS SDK代码中。这意味着NPE是一个脆弱的网络。(和)并且在SDK(v2.2.13)中回滚一个版本可能会有帮助 那也是
我建议按照那些票(请不要
+1
)。有理由预计他们会在一周内修复它。这里有一个解决方法,在修复错误之前,只需在应用程序的onCreate
中启动它,或者在任何上传活动开始之前启动:
/**
* work around for a bug:
* http://stackoverflow.com/questions/36587511/android-amazon-s3-uploading-crash
*/
public static void startupTranferServiceEarlyToAvoidBugs(Context context) {
final TransferUtility tu = new TransferUtility(
new AmazonS3Client((AWSCredentials)null),
context);
tu.cancel(Integer.MAX_VALUE - 1);
}
基本上,这是告诉
TransferService
启动并初始化它的成员变量,这样它就不会在准备好之前进入试图服务命令的状态。“崩溃是间歇性的,成功同步的比率是五分之一”意味着它有时会工作?@LazarK是的,在5次尝试中,它只会崩溃一次。您使用的AWS SDK版本是什么?编译'com.amazonaws:AWS android SDK核心:2.+'compile'com.amazonaws:AWS android SDK cognito:2.+'compile'com.amazonaws:AWS android SDK ddb:2.+'您正在使用的版本,只是范围。不过,我猜测2.2.14(head)就是基于这个。我很遗憾地告诉大家,将版本设置为2.2.13并不能解决问题。