German Einfache speicherung in Textdatei

dreamfile

Member
Licensed User
Longtime User
Hallo liebe Android-Freunde,

ich sitze nun schon die ganze Nacht an einem Anfängerproblem und finde die Lösung nicht. :sign0013:

Es geht darum eine einfache Variable in eine Textdatei zu speichern und diese ein Activity später wieder abzurufen. Unzählige Versuche blieben wirkungslos.

Textdatei = UTF-8

Ich kann mir vorstellen das es sich um eine einfache Aufgabe handelt aber ich sitze auf dem Schlauch und komme nicht weiter.

Vielen Dank schonmal für jede Hilfe

LG dreamfile :sign0104:
 

Petrus

Member
Licensed User
Longtime User
Heist "ein Activity später" immer noch innerhalb des Programms, oder nach erneutem Start des Programms?

Im ersten Fall reicht es, wenn die Variable Global ist, also in der Sub Process_Globals dimensioniert wird:

Sub Process_Globals
Dim MeineVariable as Int
'...
End Sub

Gruß Petrus
 

Skywalker

Member
Licensed User
Longtime User
Falls du wirklich in eine Textdatei speichern willst, dann kannst du es wie folgt machen.
Die Datei bleibt solange erhalten, bis dein Programm wieder deinstalliert wird.
Bei einen Update wird diese nicht gelöscht.

B4X:
Sub Globals
 Dim VarList As List 
 Dim myvar0,myvar1,myvar2 as int
End Sub

Sub Activity_Create(FirstTime As Boolean)
 myvar0 = 10
 myvar1 = 20
 myvar2 = 30
End Sub

Sub VarSave
 VarList.Clear
 VarList.Add(myvar0)
 VarList.Add(myvar1)
 VarList.Add(myvar2)
 File.writelist(File.DirInternal,"varlist",VarList)
End Sub

Sub VarLoad
 VarList = File.readlist(File.DirInternal,"varlist")
 myvar = VarList.get(0)
 myvar = VarList.get(1)
 myvar = VarList.get(2)
End Sub

Um die Liste aus einer anderen Activity aus wieder einzuladen, wären folgende Anpassungen nötig.

In der Activity Main:
B4X:
Sub Process_Globals
  Dim VarList As List
End Sub

In der zweiten Activity:
B4X:
Sub VarLoad
 Main.VarList = File.readlist(File.DirInternal,"varlist")
 myvar = Main.VarList.get(0)
 myvar = Main.VarList.get(1)
 myvar = Main.VarList.get(2)
End Sub
 

dreamfile

Member
Licensed User
Longtime User
Heist "ein Activity später" immer noch innerhalb des Programms, oder nach erneutem Start des Programms?

Im ersten Fall reicht es, wenn die Variable Global ist, also in der Sub Process_Globals dimensioniert wird:

Sub Process_Globals
Dim MeineVariable as Int

'...
End Sub

Gruß Petrus

Hallo Petrus, danke für deine Mühe. :icon_clap: Es soll Dauerhaft gespeichert werden, am besten in eine Textdatei, da es Offline laufen soll.
Gedacht ist eine Art Adressbuch, das habe ich mir als erstes Projekt ausgedacht um den Umgang mit Dateien zu erlernen.

zB. für jeden Buchstaben im Alphabet gibt es eine Activity (Activitya-z), eine Titelseite und für jeden Buchstaben eine .txt (a-z.txt)

Von der Titelseite aus kann der User zB. auf (M) drücken und dort eingeben:
Max Mustermann
Musterstr. 1
11111 Musterstadt
Das wird dann in der Datei m.txt gespeichert.

Schliesst man die App und öffnet Sie wieder (Prozess zerstört) klickt dann auf (M) sollte dort die vorher eingegebene Adresse erscheinen. (m.txt laden)

Vieleicht verlaufe ich mich mit dem Gedanken und es gibt eine andere (Bessere) Möglichkeit das umzusetzen.

Über einen Schupps in die richtige Richtung würde ich mich sehr freuen,

LG dreamfile :sign0104:


edit: @Skywalker habe deinen Beitrag gerade gelesen (haben wir zur gleichen Zeit geschrieben)
Werde ich mit genau ansehen. 1000 Dank
 
Last edited:

Skywalker

Member
Licensed User
Longtime User
Da du also mit Strings arbeiten möchtest, wird meine obige Routine schon passen. Brauchst ja nur abzuändern.
Im falle eines Adressbuches, könntest du das ganze aber auch über eine Datenbank steuern. Meines Erachtens wahrscheinlich sogar die bessere Lösung.
 

dreamfile

Member
Licensed User
Longtime User
Ich habe deinen Code ausprobiert und bekomme hier einen Fehler in der 2. Activity:
B4X:
Main.VarList = File.readlist(File.DirInternal,"varlist")

Ich kenne mich ein bischen mit SQL (Online) aus und konnte mir nicht vorstellen das es bei Android auch Offline funktioniert. Ich werde mal die entsprechenden Tutorials lesen.

Danke für deine Hilfe.

LG dreamfile :sign0104:
 

Skywalker

Member
Licensed User
Longtime User
Hast du die "VarList" in der ersten Activity unter "Sub Process_Globals" dimensioniert?
Nur dann kannst du aus einer anderen darauf zugreifen.
Dazu setzt man den Activitynamen vor die Variabel.

"Main.VarList" funktioniert natürlich nur wenn die Activity, in der du "VarList" dimensioniert hast, auch "Main" heißt.
 

dreamfile

Member
Licensed User
Longtime User
Die Datei bleibt solange erhalten, bis dein Programm wieder deinstalliert wird.

Hallo Skywalker,
habe die Tage nun einiges versucht und auch mal ein bischen Erfolg gehabt. Leider finde ich nur Beispiele die die Variablen schon vorgefertigt schreiben und da hänge ich nun. Was ich nicht hinbekomme ist eine eingegebene Variable in eine Textdatei zu speichern. Habe alle Beispiele aus B4A-Tutorials-Deutsch.pdf versucht aber nicht das gewünschte Ergebniss erhalten.

Ich hoffe du kannst mir nochmal helfen und versuche es mal zu erklären:

In der 1. Activity gebe ich zb. 3 Textfelder an. Name,Ort,Beruf diese 3 Textfelder fülle ich aus. Mit einem Klick auf einen Button werden diese 3 Texte in eine Textdatei gespeichert zb. eingabe.txt und es wird die 2. Activity aufgerufen.

In der 2. Activity wird nun die Textdatei (eingabe.txt) aufgerufen und der Inhalt angezeigt.

Danke schonmal für deine / Eure Zeit

LG dreamfile :sign0104:
 

klaus

Expert
Licensed User
Longtime User
Brauchst Du die Textdatei nur um die Variablenwerte in andere Activities zu übergeben ?
Wenn ja, ist es viel einfacher und praktischer Process globale Variablen zu verwenden.
Beiliegend ein Testprogramm mit beiden Lösungen.

Beste Grüsse.
 

Attachments

  • ProcessGlobalVariables.zip
    7.9 KB · Views: 385

Skywalker

Member
Licensed User
Longtime User
Ok. Für Textfelder müsste das dann so aussehen. Nicht getestet, aber dürfte eigentlich funktionieren.
(Code für Layout laden habe ich jetzt nicht mit eingebaut)
B4X:
Sub Globals
 Dim VarList As List 
 Dim textfeld1 As EditText
 Dim textfeld2 As EditText
 Dim textfeld3 As EditText
 Dim button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
End Sub

Sub VarSave
 VarList.Clear
 VarList.Add(textfeld1.text)
 VarList.Add(textfeld2.text)
 VarList.Add(textfeld3.text)
 File.writelist(File.DirInternal,"eingabe.txt",VarList)
End Sub

Sub button1_click
 VarSave
End Sub

In der zweiten Activity dann folgendes:
B4X:
Sub Globals
 Dim textfeld1 As EditText
 Dim textfeld2 As EditText
 Dim textfeld3 As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean)
 VarLoad
End Sub

Sub VarLoad
 Main.VarList = File.readlist(File.DirInternal,"eingabe.txt")
 textfeld1.text = Main.VarList.get(0)
 textfeld2.text = Main.VarList.get(1)
 textfeld3.text = Main.VarList.get(2)
End Sub

Aber wie Klaus schon schrieb, eine globale Variabel (z.B. Array) wäre wahrscheinlich besser.
Ein Abspeichern der ganzen eingegebenen Daten würde ich dann erst am Programmende machen.

Gruß
Sky
 
Last edited:

dreamfile

Member
Licensed User
Longtime User
Ich weiss garnicht wie ich das wieder gutmachen kann :sign0098:
Habe mich gleich über die Codes gestürzt und bin echt weit gekommen.
Ihr seid super :) DANKE
 
Top