【问题标题】:Android Amazon S3 Uploading CrashAndroid Amazon S3 上传崩溃
【发布时间】:2016-04-19 14:29:08
【问题描述】:

我试图找出在 Amazon S3 存储桶上上传时导致崩溃的原因。

日志是:

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;
}

如果有的话,我怎样才能捕捉到这个错误,以便我的应用停止崩溃并取消我的上传任务。

顺便说一句。

崩溃是间歇性的,比率是五分之一的成功同步

【问题讨论】:

  • “那次崩溃是间歇性的,比率是 5 次成功同步中的 1 次”意味着它有时会起作用?
  • @LazarK 是的,在 5 次尝试中它只会崩溃一次。
  • 您使用的是什么版本的 AWS 开发工具包?
  • 编译 'com.amazonaws:aws-android-sdk-core:2.+' 编译 'com.amazonaws:aws-android-sdk-cognito:2.+' 编译 'com.amazonaws: aws-android-sdk-s3:2.+' 编译 'com.amazonaws:aws-android-sdk-ddb:2.+'
  • 不显示您使用的版本,仅显示范围。不过,我猜测 2.2.14(头部)基于此。

标签: android amazon-web-services amazon-s3


【解决方案1】:

这似乎不是您正在做的事情,它在 AWS 开发工具包代码中。该 NPE 的含义是一个不稳定的网络。 It's been reported to Amazon on github(和 confirmed in another ticket),它似乎在 SDK (v2.2.13) 中回滚一个版本可能有帮助。

那也是makes sense given the changes made in 2.2.14, which are related to S3 transfer and the network

我建议关注这些票(请不要+1)。预计他们会在一周内修复它是合理的。

【讨论】:

  • 很遗憾地通知将版本设置为 2.2.13 并不能解决问题。
【解决方案2】:

在修复错误之前,这是一个解决方法,只需在您的应用程序的 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 启动并初始化它的成员变量,这样它就不会进入它在准备好之前尝试服务命令的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2017-08-23
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多