2016-02-06 3 views
0

Je dois envoyer un fichier image (peut être une vidéo btw), choisi ou pris sur le téléphone. Les questions sont les suivantes: - version Android peut être pré KitKat - Rénovation accepte un RequestBody qui est construit avec un fichier ou un tableau d'octets quand je pourrais seulement un FileDescriptorMultipart RequestBody pour une photo prise ou une photo prise (Filedescriptor, URI ....)

En voyant les autres postes, il ressemble Récupérer un atout du téléphone est un vrai p *** dans le *** Je comprends que la question est large! .... et c'est le problème

Répondre

0

Ce que je suis venu avec est le suivant: - pour l'image est un fluxEntrée SIF sur la base FileDescriptor comme

FileInputStream fileInputStream = new FileInputStream(fileDescriptor); 

alors je lis le fluxEntrée pour pour obtenir un byteArray

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    byte[] result = null; 
    try { 
     byte[] input = new byte[fis.available()]; 
     int read; 
     while ((read = fis.read(input)) != -1) { 
      out.write(input, 0, read); 
     } 
     result = out.toByteArray(); 
     fis.close(); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return result; 

après avoir créé un Requestbody comme d'habitude, je passe à retrofit avec une méthode post multipart spéciale en utilisant une valeur de partie spéciale comme

... , @Nullable @Part("picture\"; filename=\"picture\" ") RequestBody picture ... 

C'était vraiment difficile à trouver mais depuis retrofit est encore en version bêta, il change beaucoup et manque de documentation, espérons que cette aide