2016-10-17 8 views
0

私はAndroidアプリを開発しています。私のアプリでは、Retrofitネットワークライブラリを使って複数の画像をサーバーにアップロードしています。ファイルをアップロードする前に、ビットマップから一時ファイルを作成します。その後、アップロード後に削除してください。URI文字列を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 

上記のコードを使用すると、すべて正常に動作します。しかし、問題は一時ファイルを作成する必要があることです。私は一時ファイルを作成したくありません。私がしたいのは、私がファイルを受け取ったときにUri文字列の配列リストを作成することです。その後、ファイルのアップロード時に、ファイルに戻してアップロードプロセスを行います。

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++; 
     } 

上記のように、私はURI文字列をファイルに変換してからアップロードしています。しかし今回は、ファイルをアップロードすることができません。ファイルもnullではありません。だから私は非常に上の私の古いコードがうまく動作しているので、エラーがuri文字列をイメージファイルに戻して変換していることを確信しています。なぜ私はそれをすることができないのですか? URIから画像ファイルに変換するにはどうしたらいいですか?

私はこの

Convert file: Uri to File in Android

Create File from Uri type android

を発見し、両方の作業ではありません。

+0

あなたが望むものは不明です。始めから始めることができます。あなたがアップロードしたいことは何ですか?ファイルまたはビットマップまたは何ですか? – greenapps

+0

ファイルをアップロードします。しかし、私はプレビュー画像を表示する必要があります。そこで私はビットマップに変換しました。しかし、ファイルピッカーの結果コールバックにUri文字列を保存しました。 –

+0

ファイルをアップロードする場合は、そのファイルをアップロードします。プレビュー画像を表示する必要があるのはどういうことですか?ファイルをアップロードするだけです。なぜそれはやっていないのですか? – greenapps

答えて

0

私はあなたの質問についてはっきりしていませんが、これはあなたを助けるかもしれないと思います。この1行のコードはconvert URI to fileに役立ち、あなたのビューに表示されます。

Picasso.with(getContext()).load("URI path").into(holder.imgID); 
関連する問題