ImageView Bild anzeigen nach Neustart

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ImageView Bild anzeigen nach Neustart

    Hallo!
    Ich habe folgendes Problem, ich möchte ein Bild in einem ImageView anzeigen. Hierzu lasse ich ein Bild über die Gallery-App auswählen und bekomme hierbei die uri des Bildes. Da die uri ja nicht den tatsächlichen Pfad wiedergibt, ermittel ich den tatsächlichen Dateipfad und speichere diesen in eine Datei ab damit das Bild nach dem Neustart der App im ImageView wieder angezeigt wird. Jetzt habe ich allerdings das Problem, dass mir das Bild nicht angezeigt wird bei dem Versuch den Dateipfad wieder in eine uri "umzuwandeln". Hatte hier ein Beispiel mit dem MediaScannerConnection gefunden, allerdings erreicht er den Punkt "uriImage = uri" nicht.

    Java-Quellcode

    1. String path = "/storage/emulated/0/Download/Park-2.jpg";
    2. MediaScannerConnection.scanFile(this, new String[] { path }, null, new MediaScannerConnection.OnScanCompletedListener() {
    3. public void onScanCompleted(String path, Uri uri) {
    4. uriImage = uri;
    5. }});
    6. iv.setImageURI(uriImage);



    Permission ist auf folgendes gesetzt:

    XML-Quellcode

    1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    Alternative hatte ich versucht es über ein Bitmap zu machen:


    Java-Quellcode

    1. iv=findViewById(R.id.imageView);
    2. String path = "/storage/emulated/0/Download/Park-2.jpg";
    3. File imgFile = new File(path);
    4. if(imgFile.exists()){
    5. Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    6. iv.setImageBitmap(myBitmap);
    7. }
    Alles anzeigen
    Die Datei existiert, allerdings ist "myBitmap" null...


    Den Pfad ermittel ich über (habe ihn für Testzwecke oberhalb konstant in den Quelltext geschrieben):

    Java-Quellcode

    1. public String getRealPathFromURI(Context context, Uri contentUri) {
    2. Cursor cursor = null;
    3. try {
    4. String[] proj = { MediaStore.Images.Media.DATA };
    5. cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
    6. int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    7. cursor.moveToFirst();
    8. return cursor.getString(column_index);
    9. } finally {
    10. if (cursor != null) {
    11. cursor.close();
    12. }
    13. }
    14. }
    Alles anzeigen

    Meine Frage, was habe ich falsch gemacht? Gibt es vielleicht noch eine elegantere Möglichkeit ein Bild anhand von seinem tatsächlichen Dateipfad anzuzeigen? Oder Stimmt vielleicht etwas nicht mit der Methode den tatsächlichen Pfad zu bekommen?
    Ich bin leider etwas ratlos... Oder gibt es eine Methode von ImageView der ich einfach den Dateipfad gebe? Habe bei meiner Recherche dazu nichts gefunden.
  • Hallo.
    Ohne mir jetzt deinen Code genau angesehen Zu haben. Eine Frage.

    Hast du die Permission auch zur Laufzeit beim User erfragt? Ab API 23 reicht es nicht mehr nur die Permission im Manifest zu setzen.

    Das könnte auch der Grund sein warum dein Bitmap null ist. Für eine genauere Analyse wwäre das Logcat sinnvoll.

    developer.android.com/training/permissions/requesting
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Wenn du aus einem String eine Uri bilden willst dann in etwa so.Dann kannst du auch setImageURI benutzen.

    Quellcode

    1. String path = "/storage/emulated/0/Download/Park-2.jpg";
    2. Uri uri = Uri.parse(path);
    3. iv.setImageURI(uri);
    Auch das gewinnen der URI sceint mir auch nicht richtig zu sein.

    zeige mal Wo,Wie du die Methode getRealPathFromURI aufrufst.


    Du sagst du benutz die Gallery Activity da bekommst du doch in der onActivityResult in dem Data Objekt die Uri zu der Datei. Warum speicherst du nicht diese URI nicht als String in den SharedPref?

    String st = uri.toString(); um aus der Uri einen Sting zu machen. Wozu brauchst du die Absolute Adresse?



    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri uri = data.getData();
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von jogimuc ()

  • jogimuc schrieb:

    Hast du die Permission auch zur Laufzeit beim User erfragt? Ab API 23 reicht es nicht mehr nur die Permission im Manifest zu setzen.
    Genau das wars! Hatte zwar überall gelesen, dass man die Permission braucht, aber nicht, dass man sie explizit im Programm abfragen muss. vermutlich waren die Beiträge die ich gefunden hatte wohl etwas älter. Danke!