2013-03-23 78 views
0

我正在開發一個Android應用程序,我試圖將Google Drive集成到我的應用程序中。該程序允許同步,以便在SD卡上創建文件,然後將該文件上傳到Google Drive。我成功進行身份驗證,但是當我上傳使用insert函數時,我得到一個NullPointerException,並且我無法看到值爲空的位置,因爲當我遍歷所有內容時,沒有任何內容顯示爲空。將文件上傳到GoogleDrive會導致NullPointerException

下面是我用來執行上傳的代碼。

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

      public void run() { 
       try 
       { 
        SharedPreferences settings = context.getSharedPreferences("prefs", 0); 

        GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, DriveScopes.DRIVE); 

        credential.setSelectedAccountName(settings.getString("google_drive_account_name", "")); 
        Drive service = getDriveService(credential); 

        String storageDir = Environment.getExternalStorageDirectory().getPath(); 
        Uri fileUri = Uri.fromFile(new java.io.File(storageDir + "/folder/drive_sync.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("My App Title"); 
        body.setMimeType("text/xml"); 

        com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute(); 
        if (file == null) 
        { 
         Log.e("UploadFile", "File was empty after insert"); 
        } 
       } 
       catch (UserRecoverableAuthIOException e) 
       { 
        activity.startActivityForResult(e.getIntent(), SynchronisationSettings.REQUEST_ACCOUNT_PICKER); 
       } 
       catch (IOException ex) 
       { 
        Log.d("Upload Drive", ex.toString()); 
        ex.printStackTrace(); 
       } 
       catch (Exception ex) 
       { 
        Log.d("Upload File", ex.toString()); 
        ex.printStackTrace(); 
       } 
      } 
     }); 
     thread.start(); 
    } 

下面是我如何獲得驅動服務

私人驅動器getDriveService(GoogleAccountCredential憑證) { 返回新Drive.Builder(AndroidHttp.newCompatibleTransport(),新GsonFactory(),證書)。建立(); }

而下面是從

> 03-23 17:05:00.050: W/System.err(21664): 
> java.lang.NullPointerException 03-23 17:05:00.055: 
> W/System.err(21664): at java.net.URI.parseURI(URI.java:353) 03-23 
> 17:05:00.055: W/System.err(21664): at 
> java.net.URI.<init>(URI.java:204) 03-23 17:05:00.060: 
> W/System.err(21664): at 
> com.google.api.client.http.GenericUrl.<init>(GenericUrl.java:100) 
> 03-23 17:05:00.065: W/System.err(21664): at 
> com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:269) 
> 03-23 17:05:00.065: W/System.err(21664): at 
> com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:408) 
> 03-23 17:05:00.065: W/System.err(21664): at 
> com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:328) 
> 03-23 17:05:00.070: W/System.err(21664): at 
> com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:449) 
> 03-23 17:05:00.070: W/System.err(21664): at 
> com.BoardiesITSolutions.PasswordManager.Classes.DriveSync$1.run(DriveSync.java:85) 
> 03-23 17:05:00.070: W/System.err(21664): at 
> java.lang.Thread.run(Thread.java:856) 
+0

什麼是DriveSync類的第85行? – 2013-03-23 18:12:55

+0

@DamianJeżewski第85行是''com.google.api.services.drive.model.File file = service.files()。insert(body,mediaContent).execute();''。我不確定哪個是null,但是body和mediaContent看起來不是null – Boardy 2013-03-23 22:38:08

回答

1

我找到了原因的異常輸出的堆棧跟蹤,這是因爲我使用不同的開發PC和忘了加上SHA1指紋,並加入到Drive API的開發者API控制檯。

相關問題