![]() |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Tja, der Bildschirm wird vermutlich schwarz, weil das vermutlich eine blockierende Operation ist.
Indy arbeitet glaube ich mehrheitlich blockierend. Kann das evtl. in einen Thread/Task gepackt werden? |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Ja hab es in einen Task gepackt und er blockiert nicht mehr.
Muss noch Upload Progress machen usw. Wenn ich fertig bin poste ich den Code. LG Mirko |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
So weit so gut.
Ich habe jetzt folgenden Code für den Upload
Delphi-Quellcode:
Der Upload zeigt ab und zu die Meldung "keine Duplikate zulässig" und der Fortschrittsbalken steht direkt nach beginn des Uploads bei 100%.
function TMFORM.HandleIntentAction(const Data: JIntent): Boolean;
var C: JCursor; count: Integer; InputStream : JInputStream; ms : TMemoryStream; b: TJavaArray<Byte>; wfilter: TJavaObjectArray<JString>; filename : String; begin count := Data.getClipData().getItemCount(); ProgressBar1.Min := 0; ProgressBar1.Max := count; TTask.Run( Procedure var i,m : Integer; begin for i := 0 to count-1 do begin C := MainActivity.getContentResolver.query(Data.getClipData().getItemAt(i).getUri,nil,StringToJString(''),nil,StringToJString('')); C.moveToFirst; for m := 0 to C.getColumnCount - 1 do begin if JStringToString(C.getColumnName(m)) = '_display_name' then begin filename := JStringToString(C.getString(m)); break; end; end; InputStream := MainActivity.getContentResolver.openInputStream(Data.getClipData().getItemAt(i).getUri); ms.Free; b.Free; b := TJavaArray<Byte>.Create(InputStream.available); ms := TMemoryStream.Create; InputStream.read(b); ms.Write(b.Data^, b.Length); InputStream.close; ms.Position := 0; if not idftp1.Connected then idftp1.Connect; idftp1.Put(ms,filename); end; idFTP1.Disconnect; end); end; Hier hätte ich gerne etwas das die geladenen kBytes pro Datei anzeigt. Geht sowas? Und der Fortschrittsbalken ist sehr dünn, kann man den etwas breiter machen? In Firemonkey kann ich zwar die Höhe mit der Maus ziehen, wird aber direkt wieder zurück gestellt.
Delphi-Quellcode:
Ich wollte die Bilder vor dem Upload auch noch verkleinern denn ich brauche die Vollauflösung der Kamera nicht und der Upload geht wesentlich schneller.
procedure TMFORM.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64); begin TTask.Run( Procedure begin //Aktualisieren der Fortschrittsanzeige: ProgressBar1.Value:= AWorkCount; end); end; Gibt überhaupt eine praktikable Lösung auf dem Handy oder kommt man da schnell an die Leistungsgrenze? LG Mirko |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Guten Morgen,
wenn du den Prozentbalken etwas breiter haben willst, musst du dich mit den FMX Stilen beschäftigen. Du brauchst einen eigenen Stil für den Prozentbalken. Schau doch mal, ob du nicht mit der rechten Maustaste auf deinen Prozentbalken klicken kannst und dort eine Option findest um einen eigenen Stil anzulegen. Den kannst du dann im Stildesigner bearbeiten. Die meisten Stile sind eine Mischung aus einem Bereich einer Bitmap und aus graphischen Objekten. Grüße TurboMagic |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Hast Du eventuell eine Idee, woher die Meldung "keine Duplikate zulässig" kommt?
LG Mirko |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Keine Ahnung, verwende normalerweise kein Indy...
|
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Hallo,
habe mich heute auch wieder mit dem Datei Auswählen Thema beschäftigt. Leider mit weniger Erfolg als du. Eine einzelne bekomme ich und kann sie auslesen über Data.getData, sobald ich aber das EXTRA_ALLOW_MULTIPLE hinzufüge und im HandleIntentAction auf Data.getClipData().getItemCount() zugreife erhalte ich eine Segmentverletzung (11). Außerdem löst er dieses HandleIntentAction bereits beim Tippen auf eine Datei aus. In meinem Fall hab' ich als MIME Type gerade Text/* angegeben. Ich nutze Delphi 10.4.1 und ein Android 10 Gerät. Woran kann das liegen? Grüße TurboMagic |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Ursache gefunden: liegt am MIME type!
Mit image/* geht sowas, da stürzt ClipData nicht ab und man bekommt die Chance mehrere Bilder auszuwählen, mit */* geht's nicht. Da geht nur einzelauswahl. Mist! |
AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath
Hey danke für eure weitere Diskussion.
Ich habe das Thema damals zur Seite gelegt weil ich nicht weiterkam. Ich habe das ganze nun auch gelöst für EINE Datei
Code:
Ich habe allerdings immernoch das Problem mit mehreren Dateien.
InputStream := SharedActivity.getContentResolver.openInputStream(Data.getData);
b := TJavaArray<Byte>.Create(InputStream.available); ms := TMemoryStream.Create; InputStream.read(b); ms.Write(b.Data^, b.Length); ms.SaveToFile( filename ); ms.Free; b.Free; InputStream.close; Sobald ich auf Data zugreife knallt es.
Code:
addlog schreibt mir das in ein Memo und in eine ASCII Datei.
function TFmain.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
begin if RequestCode = ScanRequestCode then begin if ResultCode = TJActivity.JavaClass.RESULT_OK then begin if Assigned(Data) then begin addlog(data.getData.getPath); Mit einer Datei kein Problem. Sobald 2 oder mehr Dateien selektiert wurden stürzt das ganze ab. Wenn ich den Code umschreibe was ihr nutzt also Data.getClipData().getItemCount(); JStringToString(Data.getClipData().getItemAt(i).ge tUri.toString) Dann funktioniert es mit 2 Dateien, aber nicht mehr wenn ich eine Datei auswähle. Ich vermute es ligt am Aufruf der Auswahl. Wie schaut bei euch der der Quellcode aus? Meiner ist noch wie auf Seite 1. EDIT : Hab das soweit nun alles hinbekommen. Musste eine Kombination aus beidem einbinden und ganz oben abprüfen
Code:
Was ich nun nur noch habe ist das die Datei nach Tmemorystream.savetofile(); nicht direkt vorhanden ist.
if assigned(data.getClipData) then begin
. . else begin . . end; Also ein fileexist danach gibt false aus. Das dauert eine Zeit bis die Datei vorhanden ist und man diese öffnen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz