German Problem beim Bild laden, nach neustart der APP.

BenKhederSoftware

Member
Licensed User
Guten Tag! :)
Ich möchte gerne, dass man ein Bild aussucht und beim nächsten Start, der APP soll dieses wieder geladen werden.
In Visual Basic.NET kann ich das in wenigen Sekunden lösen.
Leider habe ich noch keine Lösung für Basic4android gefunden.
Ich habe bereits einen Code geschrieben…
Aber beim Laden hört der Spaß auf,
die APP Stürzt ab und zeigt eine Fehlermedlung!
Ich hoffe ich finde jemand, der mir dabei helfen kann, das Problem zu lösen.
(Im Anhang mein Projekt!)
Vielen Dank!
MFG
Ben Kheder Software

Fehlermeldung(Log):
Error occurred on line: 62 (Main)
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A1401 from pid=28195, uid=10261 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
at android.os.Parcel.createException(Parcel.java:2088)
at android.os.Parcel.readException(Parcel.java:2056)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:151)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:705)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1694)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1510)
at android.content.ContentResolver.openInputStream(ContentResolver.java:1194)
at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:212)
at anywheresoftware.b4a.objects.drawable.CanvasWrapper$BitmapWrapper.Initialize(CanvasWrapper.java:516)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runVoidMethod(Shell.java:777)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:354)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:197)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:7870)
at android.widget.TextView.performClick(TextView.java:14970)
at android.view.View.performClickInternal(View.java:7839)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29363)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
 
Last edited:

Alexander Stolte

Expert
Licensed User
Du benutzt den ContentChooser auch Falsch.

Nachdem du ein Bild ausgesucht hast, speicherst du dieses temporär und holst das Bild dann von der temporären Datei. Da Android dir den zugriff verwehrt.

B4X:
    Dim CC As ContentChooser : CC.Initialize("CC")
    CC.Show("image/*", "Choose image") 'Öffnet den ContentChooser
    Wait For (CC) CC_Result (Success As Boolean, Dir As String, FileName As String) 'warten das dass Bild ausgewählt wurde
    If Success = True Then 'wenn erfolgreich
        Wait For (File.CopyAsync(Dir,FileName, File.DirInternalCache, "tmp_img.jpg")) Complete (Success As Boolean) 'kopiere das bild in einem temporären pfad, oder in dir internal.
        If Success Then 'wenn erfolgreich
            ImageView1.Bitmap = xui.LoadBitmap(File.DirInternalCache, "tmp_img.jpg") 'lade dieses Bild von da wo du dieses zwischengepsiechert hast.
        End If
    Else
        ToastMessageShow("No Success :(",True) 'kein Erfolg mäh!
    End If

Wähle ein Bild aus, zack ist es im ImageView.
 

Attachments

  • BildLadenUndSpeichern.zip
    4 KB · Views: 24

Alexander Stolte

Expert
Licensed User
Und das mit der Tempdatei.
Du kannst auch direkt das Bild intern speichern, muss nicht unbedingt eine temp. Datei sein, falls du das Bild später noch benötigst.

Ich hatte den ContentChooser auch nie verstanden und mir unzählige Threads angeschaut, bis ich dann irgendwann auf die lösung gekommen die ich oben genannt habe, ich hatte mich immer gewundert warum ich das Bild nicht unter dem pfad den ich bekomme laden kann.
 
Top