2013-02-23 114 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