Android Amazon S3 上传崩溃

标签 android amazon-web-services amazon-s3

我试图找出在 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;
}

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

顺便说一句。

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

最佳答案

这似乎不是您正在做的事情,它位于 AWS SDK 代码中。该 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)。可以合理地预期他们会在一周内修复它。

关于Android Amazon S3 上传崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587511/

相关文章:

java - 内部存储 : Why is getFilesDir() giving me the wrong folder?

java - 为什么我的自定义 ArrayAdapter 没有被填充?

android - 将多个自定义元素设置为 MultiAutoCompleteTextView : Android

amazon-web-services - 传统数据湖与 AWS Lake Formation

amazon-web-services - s3下载和getobject有什么区别

c - HMAC-SHA1 与 OpenSSL/请求到 Amazon S3 签名

ruby-on-rails - 如何在将回形针附件上传到 S3 之前对其进行加密?

amazon-web-services - 如何删除 aws cloudfront Origin Access Identity

Android 小部件和处理来自多个实例的点击

android - 使用 AWS SNS 将仅通知负载发送到 GCM