2013-08-01 1 views
3

Google 드라이브 API를 사용하여 업로드 파일의 비율로 진행률을 표시하려고합니다.진행률 수신기가 실행되지 않음 (Google 드라이브 API)

내 menthod가 이전에 파일 업로드에 성공했지만 업로드 진행 상황을 볼 수 없습니다.

this FileUploadProgressListener을 보았지만 mediaHttpUploader.getProgress()은 0.0 (진행 시작)과 1.0 (진행 완료) 만 표시했습니다. 나는 시간의 경과의 퍼센트를 얻을 수 없다.

제작 방법 작동 여부 그렇지 않으면이 오류가 발생합니다,

public void UploadFile(final DFile uploadFile) { 
    if (!isLoggedIn()) { 
     OnUploadGoogleChecked(FALSE, "Not logged in"); 
     return; 
    } 
    AsyncTask<Void, Long, String> task = new AsyncTask<Void, Long, String>() { 
     java.io.File fileContent; 
     FileContent mediaContent; 
     com.google.api.services.drive.model.File body; 
     com.google.api.services.drive.model.File file; 
     private ProgressDialog mDialog; 
     long mFileLen; 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      mDialog = new ProgressDialog(act); 
      mDialog.setMax(100); 
      mDialog.setMessage("Uploading "); 
      mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mDialog.setProgress(0); 
      mDialog.setButton("Cancel", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface arg0, int arg1) { 
        // TODO Auto-generated method stub 

       } 
      }); 
      mDialog.show(); 
     } 

     class FileUploadProgressListener implements MediaHttpUploaderProgressListener { 

      @Override 
      public void progressChanged(MediaHttpUploader uploader) throws IOException { 
       Log.d("Dolphin got percent", String.valueOf(uploader.getProgress())); 
       switch (uploader.getUploadState()) { 
       case INITIATION_STARTED: 
        System.out.println("Initiation Started"); 
        break; 
       case INITIATION_COMPLETE: 
        System.out.println("Initiation Completed"); 
        break; 
       case MEDIA_IN_PROGRESS: 
        System.out.println("Upload in progress"); 
        System.out.println("Upload percentage: " + uploader.getProgress()); 
        break; 
       case MEDIA_COMPLETE: 
        System.out.println("Upload Completed!"); 
        break; 
       case NOT_STARTED: 
        System.out.println("Upload Not Started!"); 
        break; 
       } 
      } 
     } 

     @Override 
     protected String doInBackground(Void... arg0) { 
      try { 

       java.io.File UPLOAD_FILE = new java.io.File(uploadFile.getNameAndDir()); 
       // File's metadata. 
       fileContent = new java.io.File(uploadFile.getNameAndDir()); 
       mFileLen = fileContent.length(); 

       InputStreamContent mediaContent2 = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(UPLOAD_FILE))); 
       mediaContent2.setLength(UPLOAD_FILE.length()); 
       body = new com.google.api.services.drive.model.File(); 
       body.setTitle(fileContent.getName()); 
       body.setMimeType("image/jpeg"); 
       String parentId = null; 
       body.setParents(Arrays.asList(new ParentReference().setId(uploadFile.getFileHostFolderId()))); 


       Drive.Files.Insert mInsert = service.files().insert(body, mediaContent2); 
       MediaHttpUploader uploader = mInsert.getMediaHttpUploader(); 
       uploader.setDirectUploadEnabled(true); 
       uploader.setProgressListener(new FileUploadProgressListener()); 
       file = mInsert.execute(); 
       if (file != null) { 

       } 

      } catch (UserRecoverableAuthIOException e) { 

       Log.d("Dolphin got error", "not login " + e); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 


     protected void onPostExecute(String result) { 
      mDialog.dismiss(); 
      OnUploadGoogleChecked(TRUE, "Upload complete"); 
     }; 
    }; 
    task.execute(); 
} 
+1

응답 코드 대신 답글로 답장을 보내므로 코드를 테스트하지 않았습니다. 진행률을 얻으려면 uploader.setDirectUploadEnabled (false);를 사용해야합니다. "true"대신 및 업 ​​로더 .setChunkSize (MediaHttpUploader.MINIMUM_CHUNK_SIZE); 또는 "MediaHttpUploader.MINIMUM_CHUNK_SIZE"의 배수 여야하는 값이면 오류가 발생합니다. – tcboy88

+0

@ tcboy88 맞아요. 그냥 setDirectUploadEnabled와 setChunkSize를 추가하면 효과가 있습니다 !! – Dolphin

+0

@ Dolphin .. 가져 오기 오류가 발생하고 일부 종속성이 완전히 해결되지 않았으므로 전체 코드를 제공해주십시오. 도와주세요. – SimpleCoder

답변

7

진행 상황을 얻으려면, 당신은 (대신 true의) uploader.setDirectUploadEnabled(false);를 사용해야하며 uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE); 또는 MediaHttpUploader.MINIMUM_CHUNK_SIZE의 곱해야합니다 값 :

여기 내 업로드 코드입니다.

+0

감사합니다 :) – Dolphin

+0

저에게 많은 시간을 절약 해줍니다. – Jacky