2017-03-17 3 views
1

Ich kann viele Dateien auf Drive hochladen, aber ich weiß nicht, wann die Aufgabe abgeschlossen ist. Das Ergebnis Callback gibt mir in Ordnung, aber wenn ich die Internetverbindung schließe, wird die Aufgabe unterbrochen. Dies ist der Code Ich verwende:Android - Google Drive API: Wie kann man wissen, wann die Upload-Aufgabe abgeschlossen ist?

void createFile(DriveFolder pFldr, final String titl, final String mime, final File file) { 
    DriveId dId = null; 
    setProgressing(true); 
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected() && titl != null && mime != null && file != null) try { 

     final DriveFolder parent = pFldr != null ? pFldr : Drive.DriveApi.getRootFolder(mGoogleApiClient); 

     Drive.DriveApi.newDriveContents(getGoogleApiClient()).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() { 
      @Override public void onResult(DriveApi.DriveContentsResult driveContentsResult) { 
       DriveContents cont = driveContentsResult != null && driveContentsResult.getStatus().isSuccess() ? 
         driveContentsResult.getDriveContents() : null; 
       if (cont != null) try { 
        OutputStream oos = cont.getOutputStream(); 
        if (oos != null) try { 
         InputStream is = new FileInputStream(file); 
         byte[] buf = new byte[4096]; 
         int c; 
         while ((c = is.read(buf, 0, buf.length)) > 0) { 
          oos.write(buf, 0, c); 
          oos.flush(); 
         } 
        } 
        finally { oos.close();} 

        MetadataChangeSet meta = new MetadataChangeSet.Builder().setTitle(titl).setMimeType(mime).build(); 

        parent.createFile(mGoogleApiClient, meta, cont).setResultCallback(new ResultCallback<DriveFolder.DriveFileResult>() { 
         @Override public void onResult(DriveFolder.DriveFileResult driveFileResult) { 
          DriveFile dFil = driveFileResult != null && driveFileResult.getStatus().isSuccess() ? 
            driveFileResult.getDriveFile() : null; 
          if (dFil != null) { 
           Log.d(TAG,"photo "+count+" uploaded"); 
           count --; 
           if(count == 0){ 
            // is the task completed? 
           } 

          } else { 
           Log.d(TAG,"error during upload photo " + count); 
          } 
         } 
        }); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        ShowErrorHelper.showErrorDialog(UploadActivity.this, e); 
       } 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     ShowErrorHelper.showErrorDialog(UploadActivity.this, e); 
    } 
} 

ich wissen will, wenn es sicher ist, dass alle Dateien, die bereits auf Cloud hochgeladen werden (so kann ich sie vor Ort entfernen).

Antwort

0

Sie verwenden Google Drive Android API. Alle Laufwerkdateien, die Sie mit GDAA erstellen, werden auf dem Gerät erstellt. Sobald sie erstellt wurden, können Sie Ihre ursprüngliche Datei entfernen. Einige Zeit später wird GDAA die Drive-Datei mit der Cloud synchronisieren. Dieser letzte Aspekt ist für Sie unsichtbar und kann ignoriert werden.

+0

Ok, damit ich die Dateien löschen kann, danke! Aber es gibt keine Möglichkeit, sicher zu sein, dass die Datei bereits in der Cloud ist? Zum Beispiel möchte ich die Internetverbindung offen halten, bis die Aufgabe erledigt ist. Das Problem ist, dass, wenn Benutzer die Verbindung schließen und am nächsten Tag wieder öffnen, ich einen Tag warten muss, um die Dateien in der Cloud anzuzeigen, und ich brauche Zugriff auf sie fast in Echtzeit. – user2044083

+0

Wenn Sie dieses Echtzeit- und deterministische Verhalten wünschen, beenden Sie die Verwendung von GDAA und wechseln Sie zur REST-API. – pinoyyid

Verwandte Themen