当前位置: 首页 > 知识库问答 >
问题:

将文件上载到GoogleDrive导致NullPointerException

宇文曦
2023-03-14

我正在开发一个android应用程序,我试图将谷歌驱动器集成到我的应用程序中。该程序是允许同步,所以它在SD卡上创建一个文件,然后这个文件被上传到谷歌驱动器上。我成功地进行了身份验证,但是当我使用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();
    }

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

专用驱动器getDriveService(GoogleAccountCredential credential){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)

共有1个答案

应翰飞
2023-03-14

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

 类似资料:
  • 我想添加时间字符串的文件名,我上传到谷歌驱动器使用pydrive的结束。基本上,我尝试编写以下代码,但我不知道如何适应新的文件变量: 获取类型错误:应为str、字节或os。类路径对象,而不是GoogleDriveFile

  • > 假设我有一个导出链接,如下所示:

  • 我正在用Jersey 2.0开发表单提交服务。表单包括几个文本字段和一个文件字段。我需要提取文件、文件名、文件媒体类型和文件内容类型,并将它们保存在对象存储中。 pom。xml 表格提交请求 JVM堆大小 上载约50MB的文件时,会在名为FileBackedOutputStream7949386530699987086的目录下创建两个MD5和相似的临时文件。tmp和MIME823422976685

  • 我正试图上传一个文件到我的谷歌硬盘,下面的代码工作。如何指定要上载到哪个文件夹,即驱动器--shared with me--csvFolder

  • Amazon s3配置文件 但如果无法上载文件并给出以下错误 错误:无法上载文件java.io.IOException:需要Ant GLOB模式,但看到'/var/lib/jenkins/jobs/narad-dev-clean/workspace/*_audit.csv'。有关语法,请参见http://ant.apache.org/manual/types/fileset.html:hudson

  • 根据SkyDrive api(http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files),我在帖子请求的正文中以字节[]传递图像的内容。文件创建发生在skyDrive服务器上,但当我在skyDrive中打开它时,它说“文件应用程序被损坏或损坏”。 请求的正文 --A300x内容处理:表单数据;name=“f