2016-08-21 2 views
0

Androidのファイルピッカーを使用して外部ストレージから画像ファイルを選択する際に問題が発生します。この質問は、この質問の結果です - No such file or diectory error in image file upload using Retrofit in Android。私の問題が活動結果の外部記憶装置からファイルを開いたり読み込んだりしています。結果URIをFileに変換したいあなたは、私は新しいファイルを使用見ることができるようにAndroidでファイルピッカーを使用して外部ストレージからファイルを選択する方法

は、私が活動の結果

Uri bookUri = data.getData(); 
       if(bookUri!=null) 
       { 
        String filePath = bookUri.toString();//bookUri.toString() 
        String mime = app.getMimeType(filePath); 
        if(mime!=null && !mime.isEmpty() && (mime.toLowerCase()=="application/pdf" || mime.toLowerCase()=="application/txt" || mime.toLowerCase()=="application/text")) 
        { 
         bookFile = new File(bookUri.getPath()); 
         ivBookFile.setImageResource(R.drawable.book_selected); 
        } 
        else{ 
         Toast.makeText(getBaseContext(),"Unable to process file you have chosen.",Toast.LENGTH_SHORT).show(); 
        } 
       } 

にダウンロードフォルダからPDFファイルを読み込む(bookUri.getPath()); Fileに変換する。上記のコードはうまくいきます。それは働いている。問題は現在、活動結果のDCIM/Cameraフォルダに画像ファイルを開こうとしています。

これは、あなたが、私は新しいファイル(selectedImageUri.getPathを())を使用見ることができるように、私は

Uri selectedImageUri = data.getData(); 
       if(selectedImageUri!=null) 
       { 
        try{ 
         bmpCoverImage = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri); 
         imageFile = new File(selectedImageUri.getPath()); 
         if(bmpCoverImage!=null) 
         { 
          ivCoverImage.setImageBitmap(bmpCoverImage); 
         } 
        } 
        catch (IOException e) 
        { 
         Toast.makeText(getBaseContext(),"An error occurred with the file selected",Toast.LENGTH_SHORT).show(); 
        } 
       } 

を使用したコードです。私はpdfファイルを読んでいたように。今回はコードが機能しません。以前の質問のようにファイルを操作するとエラーになります。

私は同じエラーを得たも

imageFile = new File(Environment.getExternalStorageDirectory(),selectedImageUri.getPath()); 

をこの方法を使用していました。外部ストレージから画像ファイルを正しく開くにはどうすればよいですか?選択したファイルURIを外部ストレージからFileに変換するにはどうすればよいですか?

enter image description here

答えて

1

私はあなたがthis questionで使用しているコードを参照している場合は

のAndroidにファイルピッカーを使用して外部記憶装置から画像ファイルを選択すると、問題が生じています、あなたは、 "ファイルピッカーを使用していません"。あなたはACTION_GET_CONTENTを使用しています。これは決して "ファイルピッカー"ではなく、 "ファイルピッカー"でもありません。

結果URIをファイルに変換します。

通常、これは必須ではありません。しかし、もしそれはあなたが何をしたいです:

  • 使用ContentResolveropenInputStream()をご希望のファイルにFileOutputStreamを作成Uri

  • に代表されるコンテンツのInputStreamを取得するために

  • Java I/Oを使用して、InputStreamのバイトをFileOutputStream

にコピーします

上記のコードはうまくいきます。それは働いている。

これは、ユーザーがACTION_GET_CONTENTリクエストを処理するために選択した特定のアクティビティに対して、テストした少数のデバイスに対して機能します。ほとんどのAndroid搭載端末では動作しません。ほとんどの場合、動作しません。コードが動作する唯一の時間はUrifileスキームがある場合です。ほとんどの場合、そうはなりません。代わりにContentProviderによって提供されるコンテンツを表すcontentスキームがあります。

外部ストレージから画像ファイルを正しく開くにはどうすればよいですか?

あなたがACTION_GET_CONTENTを引き続き使用したい場合、これは特に外部ストレージとは何の関係もないのでご了承ください。ファイルを外部ストレージや他の場所に取得していません。あなたはUriを取得しています。これは、このWebページのURLなどのURLに似ています。 URLが必ずしもハードドライブ上のファイルを指しているわけではないのと同様に、Uriは必ずしもファイルシステム上のファイルを指しているとは限りません。 ContentResolverDocumentFileを使用して、Uriとそれが識別する内容を処理してください。

に常にファイルを保存する場合は、an actual file picker libraryを使用してください。

+0

ありがとうございます。私はそれに試してみます。今私は私に間違っているものを持っていて、私は明確に私を指摘しました。今私はuから良いレッスンを学びました。 –

+0

私はすでにそれを試しました。私はファイルピッカーをインストールしました。完璧に動作します。ありがとうございます。 –

関連する問題