私のアプリケーションでは、画像を開き、ファイルマネージャーを使用してアプリに「ロード」したいと思います。私はすでにIntent.ACTION_GET_CONTENT
とonActivityResult()
メソッドを使用してそれを行いました。私が得る道を除いて、すべてがうまくいきます。奇妙な形式で、画像を表示できませんImageView
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
mFileManagerString = selectedImageUri.getPath();
showPreviewDialog(mFileManagerString);
}
}
ここに mFileManagerString = /document/image:19552
ImageView
:に画像を表示するメソッドを呼び出すと
public void setPreviewIV(String pPath) {
Bitmap bmImg = BitmapFactory.decodeFile(pPath);
receiptPreviewIV.setImageBitmap(bmImg);
}
次のエラーが発生します。
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /document/image:19552: open failed: ENOENT (No such file or directory)
画像への適切なパスを取得して、ImageView
?で表示できるようにする方法
画像への適切なパスを取得する方法
あなたはすでにそれを持っています。それはあるUri
に渡されることonActivityResult()
を経由してIntent
パラメータ。それgetPath()
から抜け出すのUri
は無意味です。これ/questions/33827687/wrong-image-file-path-obtained-from-android-file-manager
は、Webブラウザにそのパスを含むURLが表示されるという理由だけで、それがハードドライブ上のパスであると考えるのと似ています。
さらに、現在のコードはBitmap
メインアプリケーションスレッドでをロードおよびデコードしています。その作業が行われている間、UIがフリーズするため、これを行わないでください。
Androidで利用できる多くの画像読み込みライブラリのいずれかを使用することをお勧めします。すべての適切なもの(Picasso、Universal Image Loaderなど)はUri
、入力として受け取るだけでなく、画像をバックグラウンドスレッドにロードしImageView
、ビットマップの準備ができたときにのみメインアプリケーションスレッドに適用します。
、何らかの理由で、あなたはこの自分で、使用しなければならないと感じた場合はContentResolver
、そのopenInputStream()
取得するInputStream
ことで表現されたデータのためにUri
。その後、にそれを渡すdecodeStream()
にBitmapFactory
。これらすべてをバックグラウンドスレッド(たとえば、doInBackground()
のAsyncTask
)で実行してBitmap
から、ImageView
をメインアプリケーションスレッド(たとえば、onPostExecute()
のAsyncTask
)に適用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加