2016-10-17 3 views
0

Je développe une application Android. Dans mon application, je télécharge plusieurs images sur le serveur à l'aide de la bibliothèque réseau Retrofit. Avant de télécharger un fichier, je crée un fichier temporaire à partir de bitmaps. Puis supprimez-les après avoir téléchargé.Impossible de convertir la chaîne d'URI en fichier image dans Android

photoFiles = new ArrayList<File>(); 
     MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); 
     int index = 0; 
     for(Bitmap bitmap: previewBitmaps) 
     { 
      File file = null; 
      try{ 
       String fileName = String.valueOf(System.currentTimeMillis())+".jpeg"; 
       file = new File(Environment.getExternalStorageDirectory(), fileName); // create temporary file start from here 
       if(file.exists()) 
       { 
        file.delete(); 
       } 
       OutputStream os = new BufferedOutputStream(new FileOutputStream(file)); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); 
       os.close(); 

       photoFiles.add(file); 
       requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file)); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
      index++; 
     } 
//Upload process goes here and delete files back after upload 

En utilisant le code ci-dessus, tout fonctionne bien. Mais le problème est que je dois créer des fichiers temporaires. Je ne veux pas créer de fichiers temporaires. Qu'est-ce que je veux faire est de créer une liste de tableau de la chaîne Uri lorsque je prends le fichier. Ensuite, lors du téléchargement du fichier, je vais les convertir en fichiers et faire le téléchargement.

photoFiles = new ArrayList<File>(); 
     MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); 
     int index = 0; 
     for(Bitmap bitmap: previewBitmaps) 
     { 
      File file = null; 
      try{ 

       Uri uri = Uri.parse(photosUriStrings.get(index)); 
       file = new File(getPathFromUri(uri)); 
       Toast.makeText(getBaseContext(),getPathFromUri(uri),Toast.LENGTH_SHORT).show(); 
       photoFiles.add(file); 
       requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file)); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
      index++; 
     } 

Comme vous pouvez le voir dans ce qui précède, je suis convertir la chaîne URI retour à fichier, puis le télécharger. Mais cette fois, retrofit impossible de télécharger le fichier. Le fichier n'est pas nul aussi. Donc, je suis assez sûr que l'erreur est de convertir la chaîne d'uri en fichier image parce que mon ancien code ci-dessus fonctionne très bien. Pourquoi je ne peux pas faire ça? Comment puis-je convertir avec succès de l'URI au fichier image s'il vous plaît?

J'ai trouvé ce

Convert file: Uri to File in Android

et

Create File from Uri type android

à la fois ne fonctionne pas.

+0

Vous ne savez pas ce que vous voulez. Commençons au début. Qu'est-ce que vous avez que vous voulez télécharger? Fichiers ou bitmaps ou quoi? – greenapps

+0

Je veux télécharger le fichier. Mais j'ai besoin de montrer l'image d'aperçu. J'ai donc converti en bitmaps. Mais j'ai sauvegardé les chaînes d'Uri sur le rappel de résultat du sélecteur de fichiers. –

+0

Si vous souhaitez télécharger un fichier, téléchargez-le. Qu'importe que vous deviez montrer une image d'aperçu aussi? Il suffit de télécharger le fichier. Pourquoi ne pas faire ça? – greenapps

Répondre

0

Je ne comprends pas votre question mais je pense que cela peut vous aider. Ce code de ligne unique vous aidera à convert URI to file et afficher dans votre vue.

Picasso.with(getContext()).load("URI path").into(holder.imgID);