사용자가 이미지를 선택하고이 환경 설정에서받은 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는 항상 동일하다.
내가 일반적으로 공유 환경 설정 – Sanjeev
'응용 프로그램 충돌에 저장된 이미지를로드 글라이드를 사용을 동일하게 유지됩니다. 그렇다면 다른 예외도 잡아야합니다. 이제 하나의 catch 블록이 있습니다. 그러나 catch가 있으면 아무 일도 일어나지 않은 것처럼 코드를 계속 진행하면됩니다. 대신에 그만둬야합니다. e.getMessage()를보고하는 사용자에게 건배를 보여주고 반환하십시오. – greenapps
'프로그램이 공유 환경 설정에 저장된 URI의 이미지를로드하려고 할 때 프로그램이 충돌하고 'InputStream을 열려고하면 응용 프로그램이 충돌합니다.' – greenapps