【问题标题】:Uploading file to GoogleDrive causes NullPointerException将文件上传到 GoogleDrive 会导致 NullPointerException
【发布时间】:2013-03-23 17:11:38
【问题描述】:

我正在开发一个 android 应用程序,我正在尝试将 Google Drive 集成到我的应用程序中。该程序允许同步,因此它会在 SD 卡上创建一个文件,然后将该文件上传到 Google Drive。我成功地进行了身份验证,但是当我使用insert 函数上传时,我得到一个 NullPointerException 并且我看不到值在哪里为 null,因为当我逐步完成所有内容时,似乎没有任何内容为 null。

以下是我用来执行上传的代码。

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();
    }

以下是我如何获得驱动服务

private Drive getDriveService(GoogleAccountCredential 凭证) { return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build(); }

下面是异常输出的堆栈跟踪

> 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 行是什么?
  • @DamianJeżewski 85 号线是com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute();。我不确定哪个为空,因为 body 和 mediaContent 似乎不为空

标签: android google-drive-api


【解决方案1】:

我找到了原因,因为我使用的是不同的开发 PC,忘记添加 SHA1 指纹并添加到 Drive API 的开发者 API 控制台。

【讨论】:

  • 您有如何执行此操作的链接吗?
  • 对不起,我不再使用这个应用程序,所以记不得了。我认为它来自 Google API 仪表板,但记不清了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多