2017-08-23 8 views
0

Ich arbeite mit AWS S3 und ich möchte die Datei zurückgeben, wenn der Prozess abgeschlossen ist. Hier ist mein Code:Android S3 AWS Download - TransferListener auf Komplette Rückgabedatei

public static File downloadFile(Context context, String name, String dirPath){ 
    File dir = new File(dirPath); 
    if(!dir.exists()) 
     dir.mkdirs(); 
    File file = new File(dirPath, name); 
    try 
    { 
     file.createNewFile(); 
     FileOutputStream fOut = new FileOutputStream(file); 
     fOut.flush(); 
     fOut.close(); 
     Toast.makeText(context, "File saved", Toast.LENGTH_LONG).show(); 

     TransferUtility transferUtility = Util.getTransferUtility(context); 
     TransferObserver observer = transferUtility.download(Constants.BUCKET_NAME, name, 
       file); 

     observer.setTransferListener(new TransferListener() { 
      @Override 
      public void onStateChanged(int id, TransferState state) { 
       Log.e("onStateChanged", state.toString()); 
       //RETUN FILE ON COMPLETED STATE 
      } 

      @Override 
      public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { 
      } 

      @Override 
      public void onError(int id, Exception ex) { 
       Log.e("onError", ex.toString()); 
      } 
     }); 

     return file; 
    } 
    catch (IOException e) 
    { 
     Log.e("Exception", "File write failed: " + e.toString()); 
    } 
    return null; 

} 

Das Problem, das ich habe ist, dass die Funktion die Datei zurückgibt, bevor die Übertragung abgeschlossen ist. Wie kann ich warten bis der Transfer abgeschlossen ist?

Antwort

0

ich meine Funktion ein wenig ändern und jetzt, anstatt nur eine Datei zurückkehren, kehre ich ein Objekt:

public class DownloadDataS3 { 
    private File file; 
    private TransferObserver observer; 
} 

Und dann im Aktivitäts verwalte ich den Betrachter.