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
  • 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.

  • 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:

  • 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!