2013-02-23 34 views
2

我正在開發一個項目,我正在做一個實施Google Drive SDK的測試,但是在嘗試上傳SD卡上的文件時遇到了問題。Google Drive Android SDK在文件上傳過程中不斷崩潰

當上傳完成後,我得到一個錯誤

02-23 23:38:54.960: E/AndroidRuntime(9160): FATAL EXCEPTION: Thread-2652 
02-23 23:38:54.960: E/AndroidRuntime(9160): java.lang.NullPointerException 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at java.net.URI.parseURI(URI.java:353) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at java.net.URI.<init>(URI.java:204) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.google.api.client.http.GenericUrl.<init>(GenericUrl.java:100) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:269) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:408) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:328) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:449) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at com.BoardiesITSolutions.googledrivetest.MainActivity$3.run(MainActivity.java:127) 
02-23 23:38:54.960: E/AndroidRuntime(9160):  at java.lang.Thread.run(Thread.java:856) 

下面是我使用進行上傳

private void saveFileToDrive() 
    { 
     Thread thread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try 
       { 
        String storageDir = Environment.getExternalStorageDirectory().getPath(); 
        fileUri = Uri.fromFile(new java.io.File(storageDir + "/BoardiesPasswordManager/android_download.xml")); 
        java.io.File fileContent = new java.io.File(fileUri.getPath()); 
        FileContent mediaContent = new FileContent("text/xml", fileContent); 

        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File(); 
        body.setTitle("Boardies Password Manager"); 
        body.setMimeType("text/xml"); 

        com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute(); 
        //Update file = service.files().update(body.getId(), body, mediaContent); 
        if (file != null) 
        { 
         //Toast.makeText(MainActivity.this, "File Uploaded: " + file.getTitle(), Toast.LENGTH_LONG).show(); 
         Log.d("GoogleDrive", "File Uploaded"); 
        } 

       } 
       catch (UserRecoverableAuthIOException e) 
       { 
        startActivityForResult(e.getIntent(), REQUEST_AUTHORISATION); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     thread.start(); 
    } 

我相信,崩潰是在下一行中出現的代碼:

com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute(); 

我不明白爲什麼會發生這種情況,並且錯誤不是非常有用。我不是這樣的,因爲fileContentmediaContentfileUri不爲空。

它成功詢問我想要使用哪個帳戶,並詢問我是否希望爲上傳授予權限,以便我看不到發生了什麼問題。

感謝您提供的任何幫助。

僅供參考我使用的教程從https://developers.google.com/drive/quickstart-android#step_2_enable_the_drive_api

+0

你正在使用可恢復的上傳嗎? – 2013-02-24 00:11:10

+2

@EdwardvanRaak,對不起,我不知道那是什麼,我怎麼找出 – Boardy 2013-02-24 00:12:23

回答

1

我設法找到了問題,但Edward van Raak確實幫了忙。

由於建議的部分問題是與我使用的不同dev dev PC有關,我忘記了將其他客戶端SHA1指紋添加到API控制檯。但是,這並沒有解決問題,因爲拋出了相同的異常。

然後,我刪除了Google Play Services jar文件並刪除了Google Drive API(請注意,您現在將收到構建錯誤)。

然後,我重新添加了Google Play服務jar文件,並使用Google API Eclipse插件重新添加了谷歌驅動器API,並重新構建了該項目,現在我可以再次成功上傳文件。

0

不知道如果我可以幫助,但它似乎是從API不是你的代碼內的一個失敗的授權問題。

請在API控制檯,包名稱和SHA1指紋中檢查您的憑據,並確保它們是正確的。你使用的是最新版本的客戶端庫嗎?

+0

謝謝,我正在使用最新版本的庫。我確實在一臺似乎可以工作的PC上啓動項目,現在將該項目複製到另一臺開發人員的PC上,我現在正在解決這個問題。這可能是相關的。 – Boardy 2013-02-24 00:30:06

+0

可能是的。也許嘗試在其他開發PC上全新安裝Eclipse 4.2並更新Google Play服務。 – 2013-02-24 00:48:14