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)
什麼是DriveSync類的第85行? – 2013-03-23 18:12:55
@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