AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android App, zusätzlich eine TStringlist abspeichern
Thema durchsuchen
Ansicht
Themen-Optionen

Android App, zusätzlich eine TStringlist abspeichern

Ein Thema von Alex_ITA01 · begonnen am 12. Sep 2014 · letzter Beitrag vom 18. Sep 2014
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Android App, zusätzlich eine TStringlist abspeichern

  Alt 12. Sep 2014, 22:26
Hallo zusammen,
ich möchte in meiner Android App ein paar Zahlen und Strings eingeben und diese dann ähnlich einem CSV Format als StringListe abspeichern.
Später, wenn die App beendet wurde und irgendwann wieder gestartet wird, sollen diese zuvor eingegebenen Sachen wieder geladen werden und es können neue Daten hinzugefügt werden.
Auch soll die Datei (ich nenne Sie jetzt mal Stringliste) nicht überschrieben werden wenn ich meine App aus der Delphi IDE neu übertrage aufs Smartphone.
Jetzt die spannende Frage, welchen Pfad nehme ich denn um mir selber Dateien anzulegen/editieren und später wieder zu laden?

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 12. Sep 2014, 23:31
Ich will ja nicht unhöflich erscheinen, aber hast Du Dir mal die Anleitungen im DocWiki von Embarcadero und die Videos auf Youtube von Embarcadero angeschaut ? Da werden sehr viele Sachen erklärt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 12. Sep 2014, 23:42
Alles gelesen habe ich nicht, dass gebe ich ehrlich zu. Muss mir da noch paar Sachen angucken.
Die ganzen Videos kann man ja gar nicht alle gucken. Das dauert ja ewig und ist in Summe länger als die Extended Fassung von Herr der Ringe 1-3
Aber ich gucke mal, was ich noch finde.

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 15. Sep 2014, 23:30
So da bin ich wieder

Habe das jetzt wie folgt lösen wollen:

Delphi-Quellcode:
AppPath := TPath.GetHomePath;
AppPath := TPath.Combine(AppPath, 'MyTestApp');
FileName := TPath.Combine(AppPath, 'SL.txt');
Jetzt habe ich folgendes Problem:
Da ich nicht direkt in dem GetHomePath schreibe möchte (da ich mehrere Apps habe die dann alle ihre Dateien in diesem Ordner ablegen), möchte ich für jede App einen Unterordner haben, wo dann diese Dateien drinne liegen.
Am liebsten wäre mir ja das Verzeichnis, wo auch die Anwendung liegt.

Wenn ich es als Win32 Anwendung compiliere und nehme TPath.GetLibraryPath, dann bekomme ich damit den Ordner, wo auch die Exe liegt. Da bräuchte ich den Unterordner theoretisch nicht und könnte direkt dort ablegen.
Wenn ich aber GetLibraryPath für die Android Anwendung nehme, bekomme ich eine Fehlermeldung, dass ich keine Rechte habe in diesem Ordner zu speichern.

Die Frage ist jetzt, wenn ich GetHomePath wirklich nehme (n muss) dann muss ich wahrscheinlich erst das Verzeichnis manuell anlegen bevor ich da drinne meine Dateien ablege oder? Windows meckert dann nämlich, dass der entsprechende Ordner nicht vorhanden ist und legt ihn auch nicht an (den Unterordner meine ich).

Vielleicht könnt ihr mir mal sagen, wie ihr das lösen würdet?
Also wo lege ich meine Sachen so ab, dass sie "eindeutig" meiner App zugeordnet sind.
Könnte ja rein theoretisch sein, dass zwei verschiedene Apps den gleichen Dateinamen für irgendwelche Speichersachen nehmen.

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#5

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 16. Sep 2014, 08:03
Da ich nicht direkt in dem GetHomePath schreibe möchte (da ich mehrere Apps habe die dann alle ihre Dateien in diesem Ordner ablegen), möchte ich für jede App einen Unterordner haben, wo dann diese Dateien drinne liegen.
Jede App hat doch ihren eigenen GetHomePath. Damit hast du es doch getrennt.

Zitat:
Auch soll die Datei (ich nenne Sie jetzt mal Stringliste) nicht überschrieben werden wenn ich meine App aus der Delphi IDE neu übertrage aufs Smartphone.
Der HomePath wird in diesem Fall immer gelöscht, da die IDE die App komplett deinstalliert, bevor sie die neue Version installiert. Ich lege daher meine Daten in der Entwicklungsphase in einem Ordner parallel zum SharedDownloadPath ab:

Delphi-Quellcode:
function TPrgData.GetDevelopDatDir:String;
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE
// heraus gelöscht wird.
var res:String;
begin
  res:=TPath.GetSharedDownloadsPath;
  while (copy(res, length(res), 1)<>TPath.DirectorySeparatorChar) and (res<>'') do
    System.Delete(res,length(res),1);
  result:=res+'MyTestApp' + TPath.DirectorySeparatorChar; //'/storage/sdcard0/MyTestApp/';
end;
Theoretisch kanns du da auch deine Daten dauerhaft speichern. (Einige Apps auf meinem Handy machen das).
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 16. Sep 2014, 15:43
Das Problem ist aber folgendes:

GetHomePath ist unter Android vielleicht immer bezogen auf die App eindeutig und damit ein Ordner wo auch nur Dateien zu der App liegen.

GetHomePath unter Windows ist aber NICHT App spezifisch sondern das "Müll"-Verzeichnis C:\User\xxx\AppData\Roaming
Da benötige ich also mindestens einen Unterordner um das App spezifisch auseinander halten zu können.

Der nächste Nachteil ist natürlich das löschen der Daten durch die IDE.

Ich benötige also ein App spezifisches Verzeichnis, wo ich auch drin schreiben und lesen kann und was unter Android und Windows gleich ist (nicht vom Pfad aber dafür von der Funktionalität).

Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#7

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 17. Sep 2014, 08:23
Du kannst doch über $ifdef gesteuert uner Android GetHomePath nehmen und unter Windows etwas anderes.

Oder verstehe ich da etwas falsch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 17. Sep 2014, 10:18
Delphi-Quellcode:
function TPrgData.GetDevelopDatDir:String;
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE
// heraus gelöscht wird.
var res:String;
begin
  res:=TPath.GetSharedDownloadsPath;
  while (copy(res, length(res), 1)<>TPath.DirectorySeparatorChar) and (res<>'') do
    System.Delete(res,length(res),1);
  result:=res+'MyTestApp' + TPath.DirectorySeparatorChar; //'/storage/sdcard0/MyTestApp/';
end;
Und das funktioniert?
Wo doch im mobilen Sektor jetzt die Strings standardmäßig 0- und nicht mehr 1-indiziert sind und somit das Length nicht mehr den letzten Char trifft.
Es gibt auch so Funktionen wie EndsStr, oder den High- und Low-Befehl, welcher den richtigen Index benutzt und die neuen String-Helper sind überall 0-basierend.
Delphi-Quellcode:
Low(string) // das erst Char (0 oder 1)
Low(StrVar) // das erst Char (0 oder 1)
High(StrVar) // das letzte Char
Length(StrVar) // die Zeichennzahl

Und wenn du schon die neuen Konstanten der IOUtils verwendest (anstatt dem alten PathDelim), warum machst du dann immernoch alles per Hand, obwohl es schon seit Jahrzehnten Funktionen dafür gibt?
(ich mein vorallem die komische Schleife > ExtractFilePath/ExtractFileDir)
Delphi-Quellcode:
function TPrgData.GetDevelopDatDir: string;
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE heraus gelöscht wird.
begin
  Result := TPath.GetSharedDownloadsPath;
  Result := ExtractFilePath(Result);
  Result := IncludeTrailingPathDelimiter(Result + 'MyTestApp'); //'/storage/sdcard0/MyTestApp/';
end;

function TPrgData.GetDevelopDatDir: string;
begin
  Result := IncludeTrailingPathDelimiter(ExtractFilePath(TPath.Combine(TPath.GetSharedDownloadsPath, 'MyTestApp')));
  // für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE heraus gelöscht wird.
// Result := '/storage/sdcard0/MyTestApp/';
end;
Für die beiden Funktionen IncludeTrailingPathDelimiter und ExtractFilePath gibt es in der IOUtils bestimmt auch neue Implementationen, die ich jetzt aber nicht im Kopf hab. (sowas wie TPath.GetDirName)

Man kann auch {$IFDEF DEBUG} verwenden, welches standardmäßig im Debug-Profil gesetzt ist.
Oder man erstellt sich eigene DEFINEs, für seine Developmentumgbung, wo man dann so Funktionen, wie diesen Pfad, automatisch umschalten kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Sep 2014 um 10:23 Uhr)
  Mit Zitat antworten Zitat
ExceptionOverflow
(Gast)

n/a Beiträge
 
#9

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 17. Sep 2014, 11:57
Eine Frage: Wieso möchtest du eine Datei in einem (nehme ich mal an) selbstdefiniertem .CSV Format speichern, anstelle einer XML Datei?
Ansonsten würde ich das File wie schon geschrieben im standardmäßigem "App-Ordner" speichern und beim Debuggen / Entwickeln eben einen speziellen anderen Pfad nehmen ($IFDEF DEBUG)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#10

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 17. Sep 2014, 23:30
Hallo,
klar, ich kann auch mit IFDEF feststellen wo meine Anwendung läuft und dann entsprechend da oder da den Pfad hinlegen.
Dachte es gibt eine Funktion, die ich nehmen kann, die sowohl für Android als auch Windows "gleich" sind und eben nicht nach einem neuen Übertragen der App durch die IDE gelöscht werden.

Nagut, ich werde das dann so machen
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:29 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