AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi FMX : getContentResolver.query Crash und Jnet_Uri getPath

FMX : getContentResolver.query Crash und Jnet_Uri getPath

Ein Thema von stalkingwolf · begonnen am 22. Jul 2020 · letzter Beitrag vom 1. Mär 2021
Antwort Antwort
Seite 2 von 2     12
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#11

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 30. Jan 2021, 17:00
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?
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#12

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 30. Jan 2021, 17:34
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
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#13

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 31. Jan 2021, 00:09
So weit so gut.

Ich habe jetzt folgenden Code für den Upload

Delphi-Quellcode:
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_namethen
         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;
Der Upload zeigt ab und zu die Meldung "keine Duplikate zulässig" und der Fortschrittsbalken steht direkt nach beginn des Uploads bei 100%.
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:
procedure TMFORM.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  TTask.Run(
  Procedure
  begin
    //Aktualisieren der Fortschrittsanzeige:
    ProgressBar1.Value:= AWorkCount;
  end);
end;
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.
Gibt überhaupt eine praktikable Lösung auf dem Handy oder kommt man da schnell an die Leistungsgrenze?

LG

Mirko

Geändert von oakley (31. Jan 2021 um 00:49 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#14

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 31. Jan 2021, 09:21
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
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#15

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 31. Jan 2021, 13:48
Hast Du eventuell eine Idee, woher die Meldung "keine Duplikate zulässig" kommt?

LG

Mirko
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#16

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 31. Jan 2021, 22:46
Keine Ahnung, verwende normalerweise kein Indy...
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#17

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 16. Feb 2021, 14:10
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
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#18

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 16. Feb 2021, 15:36
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!
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
516 Beiträge
 
#19

AW: FMX : getContentResolver.query Crash und Jnet_Uri getPath

  Alt 1. Mär 2021, 16:16
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:
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;
Ich habe allerdings immernoch das Problem mit mehreren Dateien.
Sobald ich auf Data zugreife knallt es.
Code:
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);
addlog schreibt mir das in ein Memo und in eine ASCII Datei.
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:
if assigned(data.getClipData) then begin
.
.
else begin
.
.
end;
Was ich nun nur noch habe ist das die Datei nach Tmemorystream.savetofile(); nicht direkt vorhanden ist.
Also ein fileexist danach gibt false aus.
Das dauert eine Zeit bis die Datei vorhanden ist und man diese öffnen kann.

Geändert von stalkingwolf ( 1. Mär 2021 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz