2016-04-13 3 views
2

Я пытаюсь выяснить, в чем причина этого сбоя при загрузке на ковре Amazon S3.Android Amazon S3 Загрузка авария

Log является:

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

И если когда-либо, как я могу поймать эту ошибку, чтобы мое приложение перестало сбой и просто отменило мою загрузку.

BTW.

Это крах прерывистый и соотношение 1 из 5 успешной синхронизации

+0

«Этот крафт прерывистый, а соотношение - 1 из 5 успешных синхронизаций» означает, что он когда-нибудь работает? –

+0

@ LazarK Да, из 5 попыток он только однажды потерпит крах. – Janwel

+0

какая версия AWS SDK вы используете? – tedder42

ответ

4

Это не кажется, что-то вы делаете, это внутри кода AWS SDK. Следствием этого NPE является непроницаемая сеть. It's been reported to Amazon on githubconfirmed in another ticket) и, кажется, откат одной версии в SDK (v2.2.13) may help.

То также makes sense given the changes made in 2.2.14, which are related to S3 transfer and the network.

Я предлагаю следующие билеты (пожалуйста, не +1). Разумно ожидать, что они исправит его в течение недели.

+1

С сожалением сообщаю, что установка версии 2.2.13 не решает проблему. – Lisandro

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 для запуска и инициализации это переменные-члены, чтобы он не входил в условие, когда он пытается обслуживать команды, прежде чем он будет готов.

Смежные вопросы