ユーザーは画像を選択して、この操作から受け取ったURIを共有設定で保存できます。このURIは、別のアクティビティで再び使用されます。これは、ユーザーが画像を選択してURIを保存したときにはうまく動作しますが、アプリケーションが閉じられて再び開くと、アクティビティが共有設定に保存されたURIのイメージを読み込もうとするとクラッシュします。それがなぜ起こっているのですか?画像が初めて選択されたのはなぜですか?ここで保存されたURIの画像を共有設定で読み込むことができません
私は、ユーザーが受け取ったURIを画像を選択して保存します
public void pickImage(View view) {
Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(pickIntent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == 1) {
Uri uri = data.getData();
SharedPreferences prefs = this.getSharedPreferences(PREFS, MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.clear();
edit.putString(URI, uri.toString());
edit.commit();
}
}
をそしてここで私は再びURIに保存された画像を読み込む:
private void setImage() {
SharedPreferences prefs = this.getSharedPreferences(MainActivity.PREFS, MODE_PRIVATE);
String string_uri = prefs.getString(MainActivity.URI, "not found");
Uri uri = Uri.parse(string_uri);
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bmp = BitmapFactory.decodeStream(inputStream);
ImageView iv = (ImageView) findViewById(R.id.imageView_card);
iv.setImageBitmap(bmp);
}
デバッグをするときのアプリのクラッシュを示しました。 InputStreamをオープンしようとします。私はそれをチェックし、それに使われたURIは常に同じです。
それはInputStream'を開こうとしたとき、私は、一般的に共有好み – Sanjeev
'アプリのクラッシュに保存された画像をロードするためにグライドを使用しています。その後、他の例外も捕捉する必要があります。あなたは今、1つのキャッチブロックを持っています。しかし、キャッチがある場合は、何も起こっていないかのようにコードを続けるだけです。代わりにそれをやめてください。 e.getMessage()を報告しているユーザーにトーストを表示して返します。 – greenapps
'アクティビティが共有プリファレンスに保存されたURIのイメージをロードしようとしたときにプログラムがクラッシュし、'アプリケーションがInputStreamを開こうとするとクラッシュします。 – greenapps