AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Datei auf Android wird nicht gespeichert
Thema durchsuchen
Ansicht
Themen-Optionen

Datei auf Android wird nicht gespeichert

Ein Thema von OlafSt · begonnen am 13. Feb 2015 · letzter Beitrag vom 13. Feb 2015
Antwort Antwort
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Datei auf Android wird nicht gespeichert

  Alt 13. Feb 2015, 00:40
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#2

AW: Datei auf Android wird nicht gespeichert

  Alt 13. Feb 2015, 14:04
  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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:47 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