プロジェクトに取り組んでおり、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();
なぜこれが起こっているのかわかりませんし、エラーはあまり役に立ちません。fileContent
and and mediaContent
and fileUri
are not nullのように Null であることは私にはありません。
どのアカウントを使用するかを尋ねるのに成功し、アップロードの許可を与えるかどうかを尋ねるので、何が問題なのかわかりません。
ご協力いただきありがとうございます。
参考までに、 https: //developers.google.com/drive/quickstart-android#step_2_enable_the_drive_api のチュートリアルを使用しました