KL7000F Member Licensed User Longtime User Dec 31, 2013 #1 Hallo, ich habe derzeit meine Schwierigkeiten mit einer List/Liste. In regelmäßigem Abstand sollen dort Werte "zwischengespeichert" werden. Bei Programmende wird dies in eine Datei gespeichert. Generell funktioniert die ganze Geschichte, nur leider wird beim Auslesen x-mal (so oft wie auch in die Liste gespeichert wird) nur der letzte eingespeicherte Wert ausgelesen. Obwohl ich dies mit einer For-Schleife, wie in der Wiki bzw. in Forenbeispielen gefunden, auslese. Mit ListenName.Add(wp) wird der Wert doch am Ende der Liste hinzugefügt? Folgend die entsprechenden Codestücke: Code: Sub Process_Globals Type WegpunktPumpen(Lat As String, Lon As String, Name As String, Hoehen As Int) Dim WegpunktPumpe As List Dim wp, wp1 As WegpunktPumpen End Sub Code: Sub Activity_Create(FirstTime As Boolean) ... WegpunktPumpe.Initialize ... End Sub Code: Sub Eintrag ... If xyz > zzx Then wp.Lat = Location1.Latitude wp.Lon = Location1.Longitude wp.Hoehen = Location1.Altitude wp.Name = "Wegpunkt" WegpunktPumpe.Add(wp) End If ... End Sub Code: Sub GPXSchreiben ... For i = 0 To WegpunktPumpe.Size - 1 wp1 = WegpunktPumpe.Get(i) Writer.WriteLine(TAB & "<wpt lat=" & Chr(34) & wp1.Lat & Chr(34) & " lon=" & Chr(34) & wp1.Lon & Chr(34) & ">") Writer.WriteLine(TAB & TAB & "<name>" & wp1.Name & "</name>") Writer.WriteLine(TAB & TAB & "<ele>" & wp1.Hoehen & "</ele>") Writer.WriteLine(TAB & "</wpt>") Next ... End Sub Hat jemand eine Idee wo der Haken ist? Vielen Dank und ein gutes neues Jahr Gruß Andy
Hallo, ich habe derzeit meine Schwierigkeiten mit einer List/Liste. In regelmäßigem Abstand sollen dort Werte "zwischengespeichert" werden. Bei Programmende wird dies in eine Datei gespeichert. Generell funktioniert die ganze Geschichte, nur leider wird beim Auslesen x-mal (so oft wie auch in die Liste gespeichert wird) nur der letzte eingespeicherte Wert ausgelesen. Obwohl ich dies mit einer For-Schleife, wie in der Wiki bzw. in Forenbeispielen gefunden, auslese. Mit ListenName.Add(wp) wird der Wert doch am Ende der Liste hinzugefügt? Folgend die entsprechenden Codestücke: Code: Sub Process_Globals Type WegpunktPumpen(Lat As String, Lon As String, Name As String, Hoehen As Int) Dim WegpunktPumpe As List Dim wp, wp1 As WegpunktPumpen End Sub Code: Sub Activity_Create(FirstTime As Boolean) ... WegpunktPumpe.Initialize ... End Sub Code: Sub Eintrag ... If xyz > zzx Then wp.Lat = Location1.Latitude wp.Lon = Location1.Longitude wp.Hoehen = Location1.Altitude wp.Name = "Wegpunkt" WegpunktPumpe.Add(wp) End If ... End Sub Code: Sub GPXSchreiben ... For i = 0 To WegpunktPumpe.Size - 1 wp1 = WegpunktPumpe.Get(i) Writer.WriteLine(TAB & "<wpt lat=" & Chr(34) & wp1.Lat & Chr(34) & " lon=" & Chr(34) & wp1.Lon & Chr(34) & ">") Writer.WriteLine(TAB & TAB & "<name>" & wp1.Name & "</name>") Writer.WriteLine(TAB & TAB & "<ele>" & wp1.Hoehen & "</ele>") Writer.WriteLine(TAB & "</wpt>") Next ... End Sub Hat jemand eine Idee wo der Haken ist? Vielen Dank und ein gutes neues Jahr Gruß Andy
DonManfred Expert Licensed User Longtime User Dec 31, 2013 #2 du schreibst der liest immer das gleiche. Postest aber nicht den Code der ausliest. Du postest auch keine LOG-Ausschnitte von LOG-Ausgaben die Du bei lesen und schreiben erstellt hast. Du solltest erstmal prüfen (log-Ausgaben einbauen an allen wichtigen Stellen) ob der Code der die Datei schreibt (sieht mir nach ner XML-Datei aus) auch wirklich das tut was er soll. Also ob wirklich verschiedene Einträge geschrieben werden. Nur auf die Schnipsel schauend sieht der Code jedoch ok aus. Evtl. kann man Dir besser helfen wenn du dein Projekt als ZIP exportierst und DAS hier postest. Mit code-schnipseln kann man oft Fehler nicht sehen die woanders im Code verankert sind. Wird Code: WegpunktPumpe.Add(wp) überhaupt ausgeführt? (LOG-Ausgaben einbauen) Wenn nicht dann stimmt doch vermutlich an "If xyz > zzx Then" was nicht!?
du schreibst der liest immer das gleiche. Postest aber nicht den Code der ausliest. Du postest auch keine LOG-Ausschnitte von LOG-Ausgaben die Du bei lesen und schreiben erstellt hast. Du solltest erstmal prüfen (log-Ausgaben einbauen an allen wichtigen Stellen) ob der Code der die Datei schreibt (sieht mir nach ner XML-Datei aus) auch wirklich das tut was er soll. Also ob wirklich verschiedene Einträge geschrieben werden. Nur auf die Schnipsel schauend sieht der Code jedoch ok aus. Evtl. kann man Dir besser helfen wenn du dein Projekt als ZIP exportierst und DAS hier postest. Mit code-schnipseln kann man oft Fehler nicht sehen die woanders im Code verankert sind. Wird Code: WegpunktPumpe.Add(wp) überhaupt ausgeführt? (LOG-Ausgaben einbauen) Wenn nicht dann stimmt doch vermutlich an "If xyz > zzx Then" was nicht!?
KL7000F Member Licensed User Longtime User Dec 31, 2013 #3 Logs habe ich eingebaut, diese bestätigen meinen ersten Post. Helfen mir aber derzeit nicht viel weiter bei der Problemlösung. Der "letzte" Code in meinem ersten Beitrag zeigt den Schnipsel vom Auslesen. Ich habe mal das Export-Zip angehängt, ebenso die Log und die dazugehörige Datei (*.gpx, hier als *.txt angehängt, da *.gpx nicht akzeptiert wurde), welche von der App erstellt wird. Gruß Andy Attachments log_b4a.txt log_b4a.txt 7.4 KB · Views: 428 WaFoeGPS_2014_01_01_00.txt WaFoeGPS_2014_01_01_00.txt 2.1 KB · Views: 424 WaFoeGPS_0.5_Beta.zip WaFoeGPS_0.5_Beta.zip 78.9 KB · Views: 410
Logs habe ich eingebaut, diese bestätigen meinen ersten Post. Helfen mir aber derzeit nicht viel weiter bei der Problemlösung. Der "letzte" Code in meinem ersten Beitrag zeigt den Schnipsel vom Auslesen. Ich habe mal das Export-Zip angehängt, ebenso die Log und die dazugehörige Datei (*.gpx, hier als *.txt angehängt, da *.gpx nicht akzeptiert wurde), welche von der App erstellt wird. Gruß Andy
DonManfred Expert Licensed User Longtime User Jan 1, 2014 #4 KL7000F said: Der "letzte" Code in meinem ersten Beitrag zeigt den Schnipsel vom Auslesen. Click to expand... Falsch. Writer.WriteLine sieht mir eher nach SCHREIBEN als nach LESEN aus ;-) Nach den ersten Einblick in die Textdateien sieht es für mich so aus als wäre das Problem scheinbar in der Routine die diese GPX-Datei erstellt/schreibt... HIER stehen überall die gleichen LAT/LON-Werte. Wenn hier überall das gleiche steht kann beim auslesen ja auch nichts anders bei rumkommen... Ich schätze dein Problem liegt darin das du in GPS_LocationChanged immer wieder die EINMAL geDIMte wp benutzt und das in die Liste packst. Du packst also quasi x kopien von ihr in die Liste. Durch das anhängen an die Liste wird zwar ein neuer Eingetragen. Es ist jedoch nur eine Referenz auf die eigentliche Variable "wp". Ändert sich dann etwas in wp dann werden auch alle Referenzen zu wp geändert. Das wird das Problem hier sein schätze ich. Neuer Ansatz: bitte ändere deine Routine wie hier (das ist ein Teil der GPS_LocationChanged) Code: BerechneNeueStrecke Entf1 = Entf Dim wptemp As WegpunktPumpen ' Ab hier änderungen... Anlegen einer neuen Instanz des Typs. wptemp.Initialize 'Array füllen "WegpunktPumpe" mit Wegpunkten wptemp.Lat = Location1.Latitude wptemp.Lon = Location1.Longitude wptemp.Hoehen = Location1.Altitude wptemp.Name = "Wegpunkt" WegpunktPumpe.Add(wptemp) ' Und nun in die Liste schreiben. Allerdings ist das nun jedesmal eine neue Version von dem speziellen Typ weil es in jedem Durchlauf neu geDIMt wird Log("WegpunktPumpe: " & WegpunktPumpe.Get(WegpunktPumpe.IndexOf(wptemp))) Last edited: Jan 1, 2014
KL7000F said: Der "letzte" Code in meinem ersten Beitrag zeigt den Schnipsel vom Auslesen. Click to expand... Falsch. Writer.WriteLine sieht mir eher nach SCHREIBEN als nach LESEN aus ;-) Nach den ersten Einblick in die Textdateien sieht es für mich so aus als wäre das Problem scheinbar in der Routine die diese GPX-Datei erstellt/schreibt... HIER stehen überall die gleichen LAT/LON-Werte. Wenn hier überall das gleiche steht kann beim auslesen ja auch nichts anders bei rumkommen... Ich schätze dein Problem liegt darin das du in GPS_LocationChanged immer wieder die EINMAL geDIMte wp benutzt und das in die Liste packst. Du packst also quasi x kopien von ihr in die Liste. Durch das anhängen an die Liste wird zwar ein neuer Eingetragen. Es ist jedoch nur eine Referenz auf die eigentliche Variable "wp". Ändert sich dann etwas in wp dann werden auch alle Referenzen zu wp geändert. Das wird das Problem hier sein schätze ich. Neuer Ansatz: bitte ändere deine Routine wie hier (das ist ein Teil der GPS_LocationChanged) Code: BerechneNeueStrecke Entf1 = Entf Dim wptemp As WegpunktPumpen ' Ab hier änderungen... Anlegen einer neuen Instanz des Typs. wptemp.Initialize 'Array füllen "WegpunktPumpe" mit Wegpunkten wptemp.Lat = Location1.Latitude wptemp.Lon = Location1.Longitude wptemp.Hoehen = Location1.Altitude wptemp.Name = "Wegpunkt" WegpunktPumpe.Add(wptemp) ' Und nun in die Liste schreiben. Allerdings ist das nun jedesmal eine neue Version von dem speziellen Typ weil es in jedem Durchlauf neu geDIMt wird Log("WegpunktPumpe: " & WegpunktPumpe.Get(WegpunktPumpe.IndexOf(wptemp)))
KL7000F Member Licensed User Longtime User Jan 1, 2014 #5 Falsch. Writer.WriteLine sieht mir eher nach SCHREIBEN als nach LESEN aus ;-) Click to expand... Ich glaube wir haben aneinander vorbeigeredet Ich dachte an das "Auslesen" aus der Liste Sprich dem Schreiben der Datei. Aber lassen wir das Den Code werde ich mal so ändern, testen und mit einem hoffentlich positiven Ergebnis melden (siehe Edit). Ich ging davon aus, dass beim Schreiben in die List der "alte" (zuvor eingetragene) Wert überschrieben wird (ähnlich wie bei einem String). Edit: Code getestet und hat funktioniert Mir ist eh noch aufgefallen dass "wp" nicht initialisiert wurde... Habe jetzt "wp" und "wp1" jeweils erst unmittelbar vor der Nutzung mit DIM erstellt und initialisiert. Da die App in der Regel "nur" sporadisch vorübergehend verwendet wird, denke ich nicht das es "schlimm" ist dies so zu lösen. Oder macht sich sowas im Speicherverbrauch zur Laufzeit bemerkbar? Mir ist bislang zumindest nichts aufgefallen. Vielen Dank derweil für deine Hilfe! Gruß Andy Last edited: Jan 1, 2014
Falsch. Writer.WriteLine sieht mir eher nach SCHREIBEN als nach LESEN aus ;-) Click to expand... Ich glaube wir haben aneinander vorbeigeredet Ich dachte an das "Auslesen" aus der Liste Sprich dem Schreiben der Datei. Aber lassen wir das Den Code werde ich mal so ändern, testen und mit einem hoffentlich positiven Ergebnis melden (siehe Edit). Ich ging davon aus, dass beim Schreiben in die List der "alte" (zuvor eingetragene) Wert überschrieben wird (ähnlich wie bei einem String). Edit: Code getestet und hat funktioniert Mir ist eh noch aufgefallen dass "wp" nicht initialisiert wurde... Habe jetzt "wp" und "wp1" jeweils erst unmittelbar vor der Nutzung mit DIM erstellt und initialisiert. Da die App in der Regel "nur" sporadisch vorübergehend verwendet wird, denke ich nicht das es "schlimm" ist dies so zu lösen. Oder macht sich sowas im Speicherverbrauch zur Laufzeit bemerkbar? Mir ist bislang zumindest nichts aufgefallen. Vielen Dank derweil für deine Hilfe! Gruß Andy
DonManfred Expert Licensed User Longtime User Jan 1, 2014 #6 Würdest Du in der Liste einen String namens wp (Variable) jeweils mit Add hinzufügen so würdest Du auch hier jeweils nur eine Referenz in die Liste packen. Würde man den Originalstring ändern würden sich auch hier alle kopien verändern. Stichwort "Vererbung" Ich denke Android bzw. Java) wird sich schon um die Entsorgung von nicht mehr benötigten Resourcen kümmern. Ich glaube das muss man "in diesem Projekt" nicht gross beachten. Anmerkung: Nette App btw... Wird für EUREN Fall sicher eine Hilfe sein! *schulter klopf" ;-)
Würdest Du in der Liste einen String namens wp (Variable) jeweils mit Add hinzufügen so würdest Du auch hier jeweils nur eine Referenz in die Liste packen. Würde man den Originalstring ändern würden sich auch hier alle kopien verändern. Stichwort "Vererbung" Ich denke Android bzw. Java) wird sich schon um die Entsorgung von nicht mehr benötigten Resourcen kümmern. Ich glaube das muss man "in diesem Projekt" nicht gross beachten. Anmerkung: Nette App btw... Wird für EUREN Fall sicher eine Hilfe sein! *schulter klopf" ;-)
KL7000F Member Licensed User Longtime User Jan 1, 2014 #7 Ich hoffe doch dass es der ein oder anderen Feuerwehr eine Hilfe ist ;-) Danke für die Lohrbeeren! Jetzt folgt erstmal eine Änderung der einzelnen Wegpunkte zu einem Track...nachdem das Schreiben und Lesen nun klappt. Auf jeden Fall nochmal Danke für deine Hilfe! Gruß Andy
Ich hoffe doch dass es der ein oder anderen Feuerwehr eine Hilfe ist ;-) Danke für die Lohrbeeren! Jetzt folgt erstmal eine Änderung der einzelnen Wegpunkte zu einem Track...nachdem das Schreiben und Lesen nun klappt. Auf jeden Fall nochmal Danke für deine Hilfe! Gruß Andy