German label Inhalt in txt.Datei speichern

MisterRieus

Member
Licensed User
Longtime User
Nabend Community,

ich habe folgendes Problem:

Wenn meine App gestartet wird, soll überprüft werden, ob die Datei brereits existiert und wenn nicht dann soll diese erstellt werden. Das habe ich dann so gelöst:
If File.Exists(File.DirDefaultExternal, "highscore.txt") = False Then

Ich habel ein label, dessen Zahl ich in eine txt Datei speichern möchte.
Wenn die App gestartet wird soll der Inhalt der txt Datei geladen werden und
dann dem label zugewiesen werden.

Dim Reader As TextReader
Reader.Initialize(File.OpenInput(File.DirDefaultExternal, "highscore.txt"))
Dim line As String
line = Reader.ReadLine
Reader.Close
label9.text = line

Dann kommt immer eine Fehlermeldung beim starten der App.

Ich möchte das beim starten der App geprüft wird, ob eine Datei namens highscore vorhanden ist wenn dem nicht so ist soll diese erstellt werden.
Wenn diese Datei vorhanden ist, dann soll der Inhalt (ist immer nur eine Zahl) im label9.text eingefügt werden.
Beim schließen der App soll überprüft werden, ob label9.text > als die Zahl, die in der highscore txt Datei steht und wenn ja dann soll die größerere Zahl in der highscore.txt stehen.
Wenn man die App dann wieder startet soll die Zahl aus der highscore.txt wieder in label9.text gelesen werden. Mehr möchte ich gar nicht.

Hab hier schon alles probiert, aber es will einfach nicht klappen.
Hoffe einer von euch kann mir helfen.

Vielen Dank schonmal im Vorraus.
 

klaus

Expert
Licensed User
Longtime User
Leider gibst Du uns nicht genug Angaben.
Was für eine Fehlermeldung bekommst Du ?
Ist Label9 in einer Layoutdatei definiert oder im Code?

Has Du schon mal hier Ratschläge zum Anfangen und Fragen stellen reingeschaut ?
Wenn Du Code in einem Post einfügst musst Du den zwischen Code tags einfügen. Im Editor der # Button.
Es ist meistens am Besten wenn Du das Projekt als zip Datei postest (im Programmeditor Menü Files / Export As Zip) oder zu mindest ein kleineres Projekt welches das Problem zeigt.
Da sehen wir was Du wie gemacht hast und können gezielt helfen.

Diese Code funktioniert:
B4X:
Sub Globals
    Dim Label9 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ' diese 2 Zeilen einfuegen nur wenn Label9 im Code zugefuegt wird
    Label9.Initialize("")
    Activity.AddView(Label9, 10dip, 10dip, 150dip, 40dip)
End Sub

Sub Activity_Resume
    If File.Exists(File.DirDefaultExternal, "highscore.txt") = True Then
        Dim Reader As TextReader
        Reader.Initialize(File.OpenInput(File.DirDefaultExternal, "highscore.txt"))
        Dim line As String
        line = Reader.ReadLine
        Reader.Close
        Label9.Text = line
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    Dim Writer As TextWriter
    Writer.Initialize(File.OpenOutput(File.DirDefaultExternal, "highscore.txt", False))
    Writer.WriteLine(Label9.Text)
    Writer.Close
End Sub
Beste Grüsse.
 

MisterRieus

Member
Licensed User
Longtime User
Viielen Dank für deine schnelle Antwort.
Mein Code ist genau wie dein geposteter.
Habe dann zur Sicherheit mal deinen Code kopiert
um sicher zu gehen, dass ich nicht irgendwo
irgendwas vergessen habe, aber auch mit deinem Code
kommt beim Starten der Aapp folgende Fehlermeldung:
Program paused on line: 93 Label9.text = line

Keine Ahnung wo der Fehler liegt.

EDIT: Über den Emulator läuft die App problemlos.
Was kann das nur sein?
 
Last edited:

MisterRieus

Member
Licensed User
Longtime User
Habe es mit DirRootExternal probiert.
Und damit klappt es jetzt einwandfrei!
Bin der Meinung hatte es auch mit DirRootExternal probiert, aber
egal solange es jetzt klappt ist alles gut.
Vielen Dank nochmal :)

Besteht auch die Möglichkeit Imageviews zu speichern?
Habe 6 Imageviews, die auch beim Laden der App geladen werden sollen.
 

klaus

Expert
Licensed User
Longtime User
Ja.
Lesen:
B4X:
If File.Exists(File.DirRootExternal, "Test.png") = True Then
     ImageView1.Bitmap = LoadBitmap(File.DirRootExternal, "Test.png")
End If
Schreiben:
B4X:
Dim Out As OutputStream
Out = File.OpenOutput(File.DirRootExternal, "Test.png", False)
Dim bmp As Bitmap
bmp = ImageView1.Bitmap
bmp.WriteToStream(Out, 100, "PNG")
Beste Grüsse.
 

MisterRieus

Member
Licensed User
Longtime User
Vielen Dank für die Hilfe.
Nur eine Frage. Es wird leider nur die Hälfte vom Bild (nur der Kopf ist zu sehen der Rest des Körpers nicht) in DirRootExternal dadurch kommt beim starten der App dann wieder folgender Fehler:
Program paused on line......
Also er kann auf die Datei nicht zugreifen, weil anscheinend ein Problem
beim Speichern des Bildes gibt.
Hast du vielleicht eine Lösung des Problems?
 

MisterRieus

Member
Licensed User
Longtime User
B4X:
Sub Activity_Resume
 If File.Exists(File.DirRootExternal, "highscore.txt") = True Then
        Dim Reader As TextReader
        Reader.Initialize(File.OpenInput(File.DirRootExternal, "highscore.txt"))
        Dim line As String
        line = Reader.ReadLine
        Reader.Close
        Label9.Text = line
    End If
   If File.Exists(File.DirRootExternal, "enton.png") = True Then
     imageview3.Bitmap = LoadBitmap(File.DirRootExternal, "enton.png")
End If
End Sub

sub timer1
If Label6.text < 100 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"enton.png")
     imageview3.Bitmap=LoadBitmap(File.DirAssets,"enton.png")
    Dim Out As OutputStream
Out = File.OpenOutput(File.DirRootExternal, "enton.png", False)
Dim bmp As Bitmap
bmp = imageview1.Bitmap
bmp.WriteToStream(Out, 100, "PNG")
end sub

Hoffe das reicht vom Code
 

klaus

Expert
Licensed User
Longtime User
Hoffe das reicht vom Code
Leider nein.
Was ist Sub Timer1, von wo und wie oft wird die Routine aufgerufen usw ?

Um konkret helfen zu können ist es viel einfacher für die Helfer wenn sie deinen Code unter den gleichen Bedingungen testen können wie Du.

Beste Grüsse.
 

klaus

Expert
Licensed User
Longtime User
Ich habe versucht Dir eine PrivateMail zu schicken, funktioniert aber nicht.
Übrigens arbeitest Du mit der B4A Trialversion ?
Denn Du erscheinst im Forum als nicht registrierter User ?
Wahrscheinlich ist das der Grund dass keine PMs gesendet werden können.

Ist eine abgemagerte Version die das Problem veranschaulicht so heikel dass Du sie nicht hier posten kannst ?

Beste Grüsse.
 
Last edited:

MisterRieus

Member
Licensed User
Longtime User
B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
Dim Timer1 As Timer
Dim Timer2 As Timer
Dim Timer3 As Timer
Dim Timer4 As Timer
Dim MP As MediaPlayer 'should be done in Sub Process_Globals
MP.Initialize2("MP")
MP.Load(File.DirAssets, "pichu.ogg")
Dim MP1 As MediaPlayer 'should be done in Sub Process_Globals
MP1.Initialize2("MP1")
MP1.Load(File.DirAssets, "pikachu.ogg")
Dim MP2 As MediaPlayer 'should be done in Sub Process_Globals
MP2.Initialize2("MP2")
MP2.Load(File.DirAssets, "raichu.ogg")
Dim MP3 As MediaPlayer 'should be done in Sub Process_Globals
MP3.Initialize2("MP3")
MP3.Load(File.DirAssets, "pokemon.ogg")
Dim MP4 As MediaPlayer 'should be done in Sub Process_Globals
MP4.Initialize2("MP4")
MP4.Load(File.DirAssets, "sf1.wav")
End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
Dim label4 As Label
Dim label2 As Label
Dim label5 As Label
Dim imageview1 As ImageView
Dim ImageView2 As ImageView
Dim imageview3 As ImageView
Dim imageview4 As ImageView
Dim imageview5 As ImageView
Dim imageview6 As ImageView
Dim imageview7 As ImageView
Dim imageview8 As ImageView
Dim label10 As Label
Dim t As Int
Dim c As Int
Dim l As Int
Dim m As Int
Dim r As Int
   Dim Button1 As Button
   Dim Button2 As Button
   Dim Label6 As Label
   Dim Label7 As Label
   m = 1
   Dim Button3 As Button
   Dim Label9 As Label
   Dim h As Int
   Dim panel1 As Panel
   Dim panel2 As Panel
   Dim Button4 As Button
   Dim ImageView2 As ImageView
   Dim label1 As Label
   Dim Label3 As Label
   Dim Label8 As Label
   Dim Label11 As Label
   Dim label10 As Label
   Dim t3 As Int
   Dim zahl As Int
   Dim line As String

End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   'Activity.LoadLayout("Layout1")
Activity.LoadLayout("poke")
Timer1.Initialize("Timer1", 1000) ' 1000 = 1 second
Timer2.Initialize("Timer2", 333) ' 1000 = 1 second
Timer3.Initialize("Timer3", 1000) ' 1000 = 1 second
Timer4.Initialize("Timer4", 1000) ' 1000 = 1 second
t = 60
t3 = 10
MP3.play
MP3.Looping = True

panel2.Visible = False

End Sub

Sub Activity_Resume
 If File.Exists(File.DirRootExternal, "highscore.txt") = True Then
        Dim Reader As TextReader
        Reader.Initialize(File.OpenInput(File.DirRootExternal, "highscore.txt"))
        Dim line As String
        line = Reader.ReadLine
        Reader.Close
        Label9.Text = line
    End If
    Dim Out As OutputStream
Out = File.OpenOutput(File.DirRootExternal, "enton.png", False)
Dim bmp As Bitmap
bmp = imageview1.Bitmap
bmp.WriteToStream(Out, 100, "PNG")
End Sub

Sub Activity_Pause (UserClosed As Boolean)
 Activity.Finish
End Sub

Sub ImageView1_Click
Timer2.Enabled = False
Timer1.Enabled = True
Timer2.Enabled = True
If Timer3.Enabled = True Then
c = c + 2
label4.text = c
Else If Timer4.Enabled = True Then
c = c
label4.text = c
Else 
c = c + 1
   label4.text = c
   End If
End Sub

Sub Timer1_Tick

t = t - 1
label2.text = t
If label2.Text = 30 Then
r = Rnd (1, 11)
label10.text = r
If label10.Text = 1 Then
t = t + 11
label10.text = 0
Else If label10.Text = 3 Then
t = t - 9
label10.text = 0
Else If label10.Text = 5 Then
Timer3.Enabled = True
   Else If label10.Text = 7 Then
Timer4.Enabled = True
Else
label10.text = 0
End If

End If
   If label2.text = 0 Then
   MP3.Pause
   
   imageview1.Enabled = False
   Timer2.Enabled = False
   Timer1.Enabled = False
   Label6.Text = c - l
   h = Label6.text
   If Label6.Text > Label9.Text Then
   Label9.Text = h
   Dim Writer As TextWriter
    Writer.Initialize(File.OpenOutput(File.DirRootExternal, "highscore.txt", False))
    Writer.WriteLine(Label9.Text)
    Writer.Close
   Else
   End If
  
   If Label6.text < 100 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"enton.png")
     imageview3.Bitmap=LoadBitmap(File.DirAssets,"enton.png")
    Dim Out As OutputStream
Out = File.OpenOutput(File.DirRootExternal, "enton.png", False)
Dim bmp As Bitmap
bmp = imageview3.Bitmap
bmp.WriteToStream(Out, 100, "PNG")
   Else If Label6.Text < 200 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"mauzi.png")
      imageview4.Bitmap=LoadBitmap(File.DirAssets,"mauzi.png")
   
   Else If Label6.Text < 300 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"evoli.png")
      imageview5.Bitmap=LoadBitmap(File.DirAssets,"evoli.png")
     
     Else If Label6.Text < 400 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"pikachu.png")
      imageview6.Bitmap=LoadBitmap(File.DirAssets,"pikachu.png")
     
     Else If Label6.Text < 500 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"relaxo.png")
      imageview7.Bitmap=LoadBitmap(File.DirAssets,"relaxo.png")
     
     Else If Label6.Text < 600 Then
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"mewtwo.png")
      imageview8.Bitmap=LoadBitmap(File.DirAssets,"mewtwo.png")
   End If
   
      
   End If
   End Sub
Sub Button1_Click
imageview1.Enabled = True
t = 60
label2.Text = 60
   c = 0
   label4.Text = 0
   l = 0
   label5.Text = 0
   Label6.Text = 0
Timer1.Enabled = False
If m = 0 Then
MP3.pause
Else If m = 1 Then
MP3.Play
End If
   imageview1.Bitmap=LoadBitmap(File.DirAssets,"pokeei.png")
   
   
End Sub
Sub Timer2_Tick
l = l + 1
label5.Text = l
End Sub
Sub Timer3_Tick
t3 = t3 - 1
Label11.Text = t3
If Label11.Text = 0 Then
Label11.Text = 10
label10.Text = 0

Timer3.Enabled = False

End If
End Sub
Sub Timer4_tick
t3 = t3 - 1
Label11.Text = t3
If Label11.Text = 0 Then
Label11.Text = 10
Timer4.Enabled = False
End If
End Sub
Sub Button2_Click
If m = 1 Then
   MP3.Pause
   m = 0
   
Else If m = 0 Then
   MP3.play
   m = 1
   End If
End Sub
Sub Button3_Click

panel1.Visible = False
imageview1.Visible = False
label1.visible = False
label2.visible = False
Label3.visible = False
label4.visible = False
Label8.visible = False
Label9.visible = False
panel2.Visible = True
   
   
End Sub
Sub Button4_Click

panel1.Visible = True
imageview1.Visible = True
label1.visible = True
label2.visible = True
Label3.visible = True
label4.visible = True
Label8.visible = True
Label9.visible = True
   panel2.Visible = False
   
End Sub
Sub ImageView2_Click
 Label9.Text = 0
 Dim Writer As TextWriter
    Writer.Initialize(File.OpenOutput(File.DirRootExternal, "highscore.txt", False))
    Writer.WriteLine(Label9.Text)
    Writer.Close
End Sub
Sub ImageView4_Click
   
End Sub
Sub ImageView5_Click

End Sub
Sub ImageView6_Click
   
End Sub
Sub ImageView7_Click
   
End Sub
Sub ImageView8_Click
   
End Sub

so das mein code
 

klaus

Expert
Licensed User
Longtime User
Ich kann dein Programm nicht testen denn keine Dateien.
Hat imageView1 in Activity_Resume schon eine Bitmap ?
Warum willst Du die Bitmap in Activity_Resume schon speichern ?
Wird diese nirgenwo eingelesen ?

Du hättest das Projekt as zip Datei posten sollen (IDE Menü Files / Export As Zip), wie in Post #8 schon gefragt.

Du hast meine Frage im letzten Post nicht beantwortet, warum.

Beste Grüsse.
 

MisterRieus

Member
Licensed User
Longtime User
Ich habe versucht Dir eine PrivateMail zu schicken, funktioniert aber nicht.
Übrigens arbeitest Du mit der B4A Trialversion ? Yep richtig.
Denn Du erscheinst im Forum als nicht registrierter User ?
Wahrscheinlich ist das der Grund dass keine PMs gesendet werden können.
Möglicherweise

Ich kann dein Programm nicht testen denn keine Dateien.
Hat imageView1 in Activity_Resume schon eine Bitmap ? Ja hat es.
Warum willst Du die Bitmap in Activity_Resume schon speichern ? Hab es an meheren Stellen probiert. Klappt leider nirgendwo.
Wird diese nirgenwo eingelesen ? Nein.
 

klaus

Expert
Licensed User
Longtime User
Dieser Code funktioniert bei mir:
B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
End Sub

Sub Globals
    Dim Label1 As Label
    Dim ImageView1 As ImageView
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ' nur wenn das Label in Code zugefuegt wird
    Label1.Initialize("")
    Activity.AddView(Label1, 10dip, 10dip, 150dip, 40dip)
    
    ImageView1.Initialize("")
    Activity.AddView(ImageView1, 10dip, 60dip, 150dip, 150dip)
'    ImageView1.Bitmap = LoadBitmap(File.DirAssets, "rose2.jpg")
    
'    File.Delete(File.DirRootExternal, "highscore.txt")
'    Label1.Text = 4
End Sub

Sub Activity_Resume
    If File.Exists(File.DirRootExternal, "highscore.txt") = True Then
        Dim Reader As TextReader
        Reader.Initialize(File.OpenInput(File.DirRootExternal, "highscore.txt"))
        Dim line As String
        line = Reader.ReadLine
        Reader.Close
        Label1.Text = line
    End If
    If File.Exists(File.DirRootExternal, "Test.png") = True Then
        ImageView1.Bitmap = LoadBitmap(File.DirRootExternal, "Test.png")
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    Dim Writer As TextWriter
    Writer.Initialize(File.OpenOutput(File.DirRootExternal, "highscore.txt", False))
    Writer.WriteLine(Label1.Text)
    Writer.Close
    
    Dim Out As OutputStream
    Out = File.OpenOutput(File.DirRootExternal, "Test.png", False)
    Dim bmp As Bitmap
    bmp = ImageView1.Bitmap
    bmp.WriteToStream(Out, 100, "PNG")
    Out.Close

End Sub

Sub Activity_Click
    Label1.Text = Label1.Text + 1
End Sub
Diese Zeile
' ImageView1.Bitmap = LoadBitmap(File.DirAssets, "rose2.jpg")
beim ersten Durchlauf nicht als Kommentar lassen damit ImageView1 eine Bitmap bekommt.
Beim zweiten Durchlauf auskommentieren.

Was hält Dich eignetlich davon ab B4A zu kaufen ?

Beste Grüsse.
 

Attachments

  • TestsDivers.zip
    36.8 KB · Views: 274

MisterRieus

Member
Licensed User
Longtime User
Werde ich gleich mal testen. Danke schonmal.

Bin erst vor 3 Tagen auf Basic4Android gestoßen, sprich
"programmiere" auch erst seit 3 Tagen.
Von daher will ich erstmal schauen, ob mir das ganze Spaß macht und
und mir das Prog Geld wert ist.
 
Top