2015-02-05 57 views
0

我在Android設備上使用Google Drive API。使用ASyncTask從Android上的Google Drive API文件中讀取

我需要將Google雲端硬盤上文件的內容轉換爲字符串。簡單的東西像

String dbData = driveObject.downloadFileToString("db_export.txt"); 

我正在實施一個「GoogleDrive」對象。我需要做到這一點,沒有任何的任務和線程和回調混亂。但是,我做不到。

下面是一個例子:我實現了一個名爲「findFileByPath」的方法,該方法返回文件的文件ID,該文件的路徑名作爲參數給出。然而,Android神已經強制任何對此的調用 - 因爲它處理網絡活動 - 發生在線程或AsyncTask中。問題是任何等待任務完成的暫停都會導致Google Drive API線程暫停。所以....如果我這樣做:

FindFileWithAsyncTask ffwat = new FindFileWithAsyncTask(); 
ffwat.execute(filePath); 
File f = ffwat.get(5, TimeUnits.SECONDS); 

其中調用「findFileByPath」在一個名爲「FindFileWithAsyncTask」的AsyncTask完成它只是掛起的一切。 Google Drive API僅在「get」超時時纔會繼續。

幫助!有得到是做到這一點的方式,可以避免 - 或掩蓋 - 所有的異步BS。

任何線索?謝謝!

+0

我的答案解決了您的問題嗎? – Laerte 2015-02-06 15:54:27

回答

0

使用網絡服務時很難擺脫AsyncTasks,否則您的UI將凍結等待結果。

試着這樣做:

new AsyncTask<String, Void, String>() { 
     @Override 
     protected String doInBackground(String... params) { 
      String dbData = driveObject.downloadFileToString("db_export.txt"); 
      return dbData; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      File f = new File(s); 
     } 
    }.execute(); 

然後你會等待在onPostExecute方法的結果。 即時創建AsyncTask將減少無聊的代碼。