2012-09-18 4 views
1

J'ai créé une application Android sur laquelle j'utilise l'appareil photo pour prendre une photo, puis je tente de télécharger la photo sur mon compte Google Drive. Voici un extrait du code J'utilise:Téléchargement de jpeg sur Google Drive à partir de l'application Android "fin de flux inattendue"

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

Ce qui se passe est que je reçois les exceptions suivantes 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) 

Quand je suis à travers le Google Drive et le code client à voir ce qu'il faisait, il a semblé fonctionner deux fois. Mais maintenant, il échoue à nouveau.

Des idées?

Répondre

0

Je pense que j'aurais pu trouver mon problème. C'est étrange l'erreur que je recevais de l'API du lecteur, mais finalement, je pense que j'essayais de capturer des images de la caméra et de les enregistrer avec seulement un horodatage jusqu'à la seconde. J'ai ajouté millisecondes dans le nom de fichier et jusqu'à présent, je n'ai pas encore vu l'exception. Nous verrons.

Questions connexes