2013-11-09 28 views
2

我有下面的代碼,應該從我的Android設備上傳圖片到我的谷歌驅動器。如何更快地上傳到GoogleDrive?

private void saveFileToDrive() { 

     progressDialog = ProgressDialog.show(this, "", "Loading..."); 

    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
     try { 
      // File's binary content 
      java.io.File fileContent = new java.io.File(fileUri.getPath()); 
      FileContent mediaContent = new FileContent("image/jpeg", fileContent); 

      // File's metadata. 
      File body = new File(); 
      body.setTitle(fileContent.getName()); 
      body.setMimeType("image/jpeg"); 

      File file = service.files().insert(body, mediaContent).execute(); 
      if (file != null) { 
      showToast("Photo uploaded: " + file.getTitle()); 

      progressDialog.dismiss(); 
      //startCameraIntent(); 
      } 
     } catch (UserRecoverableAuthIOException e) { 
      startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
    }); 
    t.start(); 
    } 

東西是上傳需要太長時間。這很奇怪,因爲圖像不是太大

我想如果我通過原始的Drive App上傳它,它會做得更快。

1)有沒有辦法讓上傳速度更快,同時又不損害圖像質量?

2)我以爲使用回調,但什麼是新的線程和回調的最佳做法?

3)我該怎麼讓上傳當前數字uplaod進度(X%,到目前爲止已完成)

有沒有使用任何準備的簽名\模式?

+0

什麼是您的POST URL? – Pete

+0

你的意思是什麼變量? –

回答

1

你在主線上做這個工作嗎?我建議使用AsyncTaskProgressDialog,以便在您的用戶界面等待響應時在後臺完成工作。使用runnables進行上傳不是一個好主意。任何內置於android的後臺線程都應該有性能提升。特別是因爲用戶會看到一個不確定的進度對話框,比沒有明顯原因的應用程序更令人滿意。

或者,如果您使用Amazon S3服務器存儲上傳內容,則可能需要使用第三方庫,如Simpl3r

如果一個AsyncTask或Simpl3r不是你的一杯茶。 Intent Service是上傳背景的好選擇,因爲上傳過程與您的活動完全分離。上傳完成後,您可以更新本地存儲數據,以便用戶返回到該活動。

1)沒有理由爲什麼你需要改變任何關於圖像上傳它。特別是如果它很小。

2)我建議不要回調。使用本地存儲,例如數據庫,然後您可以在上傳完成後在本地更新信息。當您返回到活動/片段時,您開始上傳,您可以使用AsyncTask/AsyncTaskLoader/CursorLoader等來加載本地數據。許多選項可用於更改應用中的實時數據。

3)存在許多圖案,我在這裏列出的一些我最喜歡的圖案。

+1

但我正在使用'ProgressDialog'。爲什麼'AsyncTask'比'new thread'更可取? –

+0

如何顯示上傳當前數值上傳進度(目前已完成X%) –