1

カメラを使用して写真を撮り、その写真を Google ドライブ アカウントにアップロードしようとする Android アプリケーションを作成しました。ここに私が使用しているコードのスニペットがあります:

    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null);
    b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
        public void initialize(JsonHttpRequest request) throws IOException {
            DriveRequest driveRequest = (DriveRequest) request;
            driveRequest.setPrettyPrint(true);
            driveRequest.setKey(MY_CLIENT_ID);
            driveRequest.setOauthToken(token);
        }
    });

    final Drive drive = b.build();


    final com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
    body.setTitle(mCurrentPhotoPath.substring(mCurrentPhotoPath.lastIndexOf("/") + 1, mCurrentPhotoPath.length()));
    body.setDescription("A Test File");
    body.setMimeType("image/jpeg");

    java.io.File file = new java.io.File(mCurrentPhotoPath);

    final FileContent mediaContent = new FileContent("image/jpeg", file);
    //final InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new FileInputStream(file));

    new Thread(new Runnable() {
        public void run() {
            try {
                com.google.api.services.drive.model.File file = drive.files().insert(body, mediaContent).execute();

                System.out.println("Title: " + file.getTitle());
                System.out.println("Description: " + file.getDescription());
                System.out.println("MIME type: " + file.getMimeType());
            }
            catch (GoogleJsonResponseException e) {
                GoogleJsonError error = e.getDetails();

                System.err.println("Error code:" + error.getCode());
                System.err.println("Error message: " + error.getMessage());

                // More error information can be retrieved with error.getErrors().
            }
            catch (HttpResponseException e) {
                // No Json body was returned by the API.
                System.err.println("HTTP Status code: " + e.getStatusCode());
                System.err.println("HTTP Reason: " + e.getMessage());
            }
            catch (IOException e) {
                // Other errors (e.g connection timeout, etc.).
                System.out.println("An error occurred: " + e);
            }
        }
    }).start();

何が起こっているのかというと、logcat で次の例外が発生しています。

09-17 22:11:31.683: WARN/HttpTransport(11701): exception thrown while executing request
    java.io.IOException: unexpected end of stream
    at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:88)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:991)
    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:279)
    at com.google.api.services.drive.Drive$Files$Insert.executeUnparsed(Drive.java:309)
    at com.google.api.services.drive.Drive$Files$Insert.execute(Drive.java:331)
    at com.xxxxxx.UploadImageService$2.run(UploadImageService.java:143)
    at java.lang.Thread.run(Thread.java:856)

Google ドライブとクライアントのコードを調べてみると、実際には 2 回機能しているように見えました。しかし、今また失敗しています。

何か案は?

4

1 に答える 1

0

私は自分の問題を理解したかもしれないと思います。ドライブ API から取得したエラーは奇妙ですが、最終的には、カメラから画像をキャプチャして、秒までのタイムスタンプのみで保存しようとしていたと思います。ファイル名にミリ秒を追加しましたが、これまでのところ例外は見られません。見てみましょう。

于 2012-09-18T15:53:35.917 に答える