Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Datei auf Android wird nicht gespeichert (https://www.delphipraxis.net/183908-datei-auf-android-wird-nicht-gespeichert.html)

OlafSt 12. Feb 2015 23:40

Datei auf Android wird nicht gespeichert
 
Hallo Freunde,

habe mit der 30-Tage-Demo von XE7 mal in die Android-ENtwicklung hineingestöbert. Und bin dabei auf ein Rätsel gestoßen. Denn mein Testprogramm ist nicht in der Lage, eine Textdatei auf dem Android-Gerät zu speichern. Die Datei ist schlicht nicht da, nicht bei Programmstart, nicht während der Laufzeit, nicht nach Programmende.

Folgender Code wird dazu benutzt:
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  System.Sensors, System.Sensors.Components, System.IOUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    LocationSensor1: TLocationSensor;
    Label1: TLabel;
    Label2: TLabel;
    LongLabel: TLabel;
    LatLabel: TLabel;
    Label3: TLabel;
    RefreshLabel: TLabel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure LocationSensor1LocationChanged(Sender: TObject; const OldLocation,
      NewLocation: TLocationCoord2D);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    f: TEXTFILE;
    fs: TFileStream;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  if Button1.Tag=0 then
  begin
    Button1.Text:='Started';
    Button1.Tag:=1;
    s:=System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'test.txt');
    ShowMessage(s);
    AssignFile(f,s);
    ReWrite(f);
    Writeln(f,'Lat;Lng');
    Flush(f);
    //fs:=TFileStream.Create(s,fmCreate);
    //fs.WriteData(string('Test').ToCharArray);
    //s:='Lat;Lng'#13#10;
    //fs.Write(PChar(s)^, Length(s));
  end
  else
  begin
    Button1.Text:='Stopped';
    Button1.Tag:=0;
    CloseFile(f);
  end;
  LocationSensor1.Active:=(Button1.Tag=1);
end;

procedure TForm1.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D);
var
  s,s1: string;
begin
  try
    RefreshLabel.Text:=DateTimeToStr(now);
    s:=Format('%2.7f',[NewLocation.Latitude]);
    s1:=s;
    s1:=s1+';';
    LatLabel.Text:=s;
    //fs.Write(PChar(s)^, Length(s));
    //s:=';';
    //fs.Write(PChar(s)^, Length(s));
    s:=Format('%2.7f'#13#10,[NewLocation.Longitude]);
    LongLabel.Text:=s;
    s1:=s1+s+#13#10;
    writeln(f,s1);
    Flush(f);
    //fs.Write(PChar(s)^, Length(s));
  except
    RefreshLabel.Text:='(invalid Position received)';
  end;
  Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  RefreshLabel.Text:='';
  Timer1.Enabled:=false;
end;

end.
Ein Klick auf den Button startet den GPS-Sensor, erzeugt eine Textdatei und schreibt da eine Zeile schon mal rein. Bei jeder Änderung der GPS-Werte werden die Koordinaten in die Textdatei geschrieben. Erneuter Klick auf den Button stoppt das ganze und schließt die Datei ordentlich.

Die Showmessage beim Start zeigt mir den kompletten Namen der Datei an ("data/data/com.embarcadero.project1/test.txt") und das Programm läuft ohne Murren. Nur eine Test.txt ist nirgendwo zu finden. Auf dem ganzen Handy nicht.

Ich habe das mit meinem S5 ausprobiert und einem Galaxy Tab 7.0 - beide zeigen das gleiche Phänomen. Spaßenshalber habe ich auch mal anstelle des TEXTFILE das ganze mit FileStreams versucht. Same result.

Ich habe den Verdacht, das das an der Test-Version von XE7 liegt, kann mir das aber nicht so recht vorstellen. Wo liegt dann der Fehler ?

Olli73 13. Feb 2015 13:04

AW: Datei auf Android wird nicht gespeichert
 
Zitat:

Zitat von OlafSt (Beitrag 1289700)
Delphi-Quellcode:
  s:=System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'test.txt');


Die Showmessage beim Start zeigt mir den kompletten Namen der Datei an ("data/data/com.embarcadero.project1/test.txt") und das Programm läuft ohne Murren. Nur eine Test.txt ist nirgendwo zu finden. Auf dem ganzen Handy nicht.


Auf dieses Verzeichnis hat nur deine App zugriff -> Du musst woanders speichern oder die Datei (nur) in der gleichen App einlesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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