2

プロジェクトに取り組んでおり、Google ドライブ SDK の実装に関するテストを行っていますが、SD カードにファイルをアップロードしようとすると問題が発生します。

アップロードが完了すると、エラーが発生します

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

なぜこれが起こっているのかわかりませんし、エラーはあまり役に立ちません。fileContentand and mediaContentand fileUriare not nullのように Null であることは私にはありません。

どのアカウントを使用するかを尋ねるのに成功し、アップロードの許可を与えるかどうかを尋ねるので、何が問題なのかわかりません。

ご協力いただきありがとうございます。

参考までに、 https: //developers.google.com/drive/quickstart-android#step_2_enable_the_drive_api のチュートリアルを使用しました

4

2 に答える 2

1

問題を見つけることができましたが、Edward van Raak が助けてくれました。

示唆されたように、問題の一部は私が使用していた別の開発用 PC に関係しており、別のクライアント SHA1 フィンガープリントを API コンソールに追加するのを忘れていました。ただし、同じ例外がスローされたため、これは問題を解決しませんでした。

次に、Google Play サービスの jar ファイルを削除し、Google Drive API を削除しました (ビルド エラーが発生することに注意してください)。

次に、Google Play サービスの jar ファイルを再追加し、Google API Eclipse プラグインを使用して Google ドライブ API を再追加し、プロジェクトを再構築したところ、ファイルを再び正常にアップロードできるようになりました。

于 2013-02-24T01:40:52.317 に答える
0

私がお手伝いできるかどうかはわかりませんが、あなたのコードではなく API 内から発生する認証の失敗の問題のようです。

API コンソールで資格情報、パッケージ名、SHA1 フィンガープリントを確認し、それらが正しいことを確認してください。また、クライアント ライブラリの最新バージョンを使用していますか?

于 2013-02-24T00:19:09.373 に答える