Anzeige Bild/Image (BLOB) aus SQLite

  • Hallo,

    Fotos kann ich über meine APP erstellen, lege diese in der Gallery ab, erstelle die byte[] Variante und speichere in eine SQLite-Tabelle.

    Leider habe ich aber Probleme diese Fotos später wieder zu laden.

    In der Tabelle stehen der Dateiname und die Byte-Form des Bildes (BLOB). Leider gelingt mir nicht die Anzeige aus der Datenbank.

    Das erstellte Bitmap ist stets leer bzw. 0.

    Irgendwas fehlt oder mache ich falsch. Kann jemand helfen ?

    Der Inhalt von "image" (BLOB) sieht dann z.B. so aus : [B@8180772

    Das Auslesen geschieht wie folgt:

    Code
    sSQL = "SELECT image FROM photo_table WHERE _id = "+picID+" ;";
    Cursor c1 = myDB.doSQL(sSQL);
    c1.moveToFirst();
    
    bild = c1.getBlob(0);  // das bild als byte Array
    bitmap = BitmapFactory.decodeByteArray(bild,0, bild.length);  // ergibt ein leeres Bitmap  ???
    .....
    // in der Recyclerview nach Übergabe der bitmap
      holder.bmp_image.setImageBitmap(dataModell_TaskList.get(position).getBMPFoto());
  • Hallo ich glaube ich hatte svhon mal gesagt das

    getExternalStoragePublicDirectory ab API 29 deprecated ist.

    Ab Andtoid 9 scoped storage memory.

    Die datei wird sicherlich nicht in den Ordner erstellt werden. Teste prüfe es ob überhaupt die Datei erstellt wird. Ich würde sagen nein.

    Code
    imageFile = new File(storeDir,filename);
    Auch wenn du hier ein creadeNewFile  nach schiebst wird die Datei nicht erstellt werden. 
    Scoped storage. 
    Du hast bestimmt Target api größer 29

    Einmal editiert, zuletzt von nono124 (27. Juni 2023 um 21:06)

  • Hallo,

    meine Fotos landen aber alle in der Gallery, ich dachte durch dieses Environment ?

    Hier der Ausschnitt vom build.gradle und manifest

  • Wie hast du denn das Bild erstellt?

    Wenn du zum Erstellen den Intent benutzt hast klar wird da das Bild im Image ordner abgelegt. Denn die app die fu mit dm intent aufrufst hat ja auch die rechte dazu.

    Das was du mit dem file provider versuchst reicht nicht aus du hast ja keine Meta zeilen und auch kein Path xml.

    https://medium.com/@aungkyawmyint_26195/using-implicit-camera-intent-with-fileprovider-8182f59ee972

    Eigentlich ist der Fileprovider dazu da um Zugriff auf deinen App eigenen Speicherbereich nach außen zugeben für andere Apps. Zb um Dokumente die in deinen geschützten App bereich sind auch mit einem Intent als Mail zu senden.

    Du willst aber Zugriff auf den exteren Speicher haben und ab Android 10 ist SAF angesagt.

    Du kompilerst für Android 13 API 33.

    targetSdk 33

  • OK, danke ... werde das mal anschauen ...

    Du kompilerst für Android 13 API 33.

    targetSdk 33

    mein Handy hat Android 11, mein Sohn hat 13 - läuft auf beiden Geräten.

    Da wir die APP veröffentlichen wollen muss ich mich wohl damit beschäftigen :(

    Das was ich bis jetzt aber immer noch nicht weiß, wieso ist die bitmap nach dem byte convert immer 0 ?

    Da die APP mit dem Gallery-Zugriff läuft, ist mir das noch egal.

  • Da die APP mit dem Gallery-Zugriff läuft, ist mir das noch egal.

    Und das mag ich zu bezweifeln das deine App einen Zugriff auf die Images Ordner hat.

    Zeige wie du das macht und wie du meinst wirklich die Datei zu öffnen.

    Einmal editiert, zuletzt von nono124 (28. Juni 2023 um 17:00)

  • Ich habe das Verzeichnis:

    /storage/emulated/0/Pictures/Task_X_20230627_2350.jpg
    Code
    image1 = findViewById(R.id.Image1);
    
    name1 = c1.getString(0);    // hole die Datei mit dem Verzeichnis 
    bitmap = BitmapFactory.decodeFile(name1);
    image1.setImageBitmap(bitmap);

    in name1 steht das Verzeichnis. Im ScreenShot habe ich das Notebook Display fotografiert (nicht an AndroidStudio angeschlossen) !

  • na klar wird das Bild angeziegt, warum soll ich lügen ??

    Wie folgt aktiviere ich die Camera:

    Einmal editiert, zuletzt von VomDorf (28. Juni 2023 um 17:34)

  • Nochnal mein Problem , der erste Beitrag:

    Ich speichere die byte[] Version in ein BLOB (SQLite).

    Beim decoden zu bitmap kommt immer 0 raus !!

  • Beim wider lesen der Datei musst du auch den intent und file provider benutzen.

    Dann versuche doch mal die Datei einzlesen und im Imageview anzuzeigen. Dann siehst du ob du es lesen kannst.

  • ja Danke, werde ich dann später versuchen, da ich weiter kommen muss , wir wollen veröffentlichen und da ist noch viel zu tun.

    Meinem Partner, mein Sohn, reicht erst mal die Variante die Fotos über die gallery und Adresstabelle zu verwalten.

    Falls dort gelöscht wird, habe ich eine exist-Prüfung vorher und lösche dann die Verzeichnisdaten in meiner Tabelle, gebe dann einen Toast-Hinweis.

    Danke nono124

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!