Ich lasse den Benutzer ein Bild auswählen und den URI, den ich von dieser Aktion erhalte, in meinen gemeinsamen Einstellungen speichern. Dieser URI wird in einer anderen Aktivität erneut verwendet. Dies funktioniert gut, wenn der Benutzer das Bild einmal auswählt und der URI gespeichert wird. Wenn die Anwendung geschlossen und erneut geöffnet wird, stürzt das Programm jedoch ab, wenn die Aktivität versucht, das in den gemeinsamen Voreinstellungen gespeicherte Bild des URI zu laden. Warum passiert das und warum funktioniert es zum ersten Mal, wenn das Bild ausgewählt wird?Das Bild kann nicht aus dem gespeicherten URI in freigegebenen Einstellungen geladen werden
Hier mache ich den Benutzer ein Bild auswählen und den empfangenen URI speichern:
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();
}
}
Und hier habe ich das Bild geladen werden wieder in der URI gespeichert:
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);
}
Debuggen die App abstürzt zeigte, wenn Es versucht den InputStream zu öffnen. Ich habe es überprüft und der dafür verwendete URI ist immer derselbe.
ich gleiten verwenden in der Regel Bild in gemeinsamen Vorlieben Abstürze – Sanjeev
'die App gespeichert zu laden, wenn es die InputStream' zu öffnen versucht. Dann sollten Sie auch andere Ausnahmen abfangen. Sie haben jetzt einen Fangblock. Aber wenn es einen Haken gibt, fahren Sie einfach mit dem Code fort, als ob nichts passiert wäre. Stattdessen solltest du dann aufhören. Zeigen Sie einen Toast auf den Benutzer an, der e.getMessage() meldet, und kehren Sie zurück; – greenapps
'stürzt das Programm ab, wenn die Aktivität versucht, das Bild des URIs zu laden, das in den gemeinsamen Voreinstellungen gespeichert ist 'UND' die App stürzt ab, wenn sie versucht, den InputStream zu öffnen'. – greenapps