Italian Testo salvato a doppio

Antonio67

Member
Ciao vorrei chiedere un piccolo aiutino per una semplice app che sto cercando di concludere.
l'app e composta da una semplice listview,una edittext per inserire testo nella listview e un button che mi salva il testo inserito il problema e questo: gli elementi (testo) che aggiungo nella listview riesco sia a salvarli che a leggerli all'apertura dell'app, ed è qui che nasce il problema,e cioè tutto quello che salvo viene salvato a doppio se non a triplo, es. cavallo,sella,staffa. Chiudo l'app, la riapro e aggiungo: sale zucchero, pepe,chiudo e quando riapro risulta tutto a doppio se anche a triplo ciò che ho memorizzato,tipo cavallo,cavallo,sella,sella,staffa,staffa,staffa,sale.....ecc. Poi con il comando listview.removat(position) cancello un elemento ma poi ritorna all'apertura.Mistero(per me ovvio) Aiutino? grazie
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
quando apri e chiudi una app in android in realtà e come se la iconizzi in windows
per cui quando riapri la tua app i dati inseriti in essa già ci sono e tu li reinserisci
e allora cosa fare? semplice prima di inserire i dati nella listview devi cancellarla
 

Antonio67

Member
Ciao lord grazie per la risposta. Se intenti il comando listview.clear , lo inserito ma per sicurezza domani controllo e magari ti invio il codice completo.;)
 

Antonio67

Member
Buongiorno a tutti Per Luca: Ho scaricato il zip ma non me lo legge dice che non e compatibile con la mia versione che e la 2.50
Per lord: infatti listview.clear mancava nel codice di salvataggio adesso non mi moltiplica piu, solo che non riesco piu a far visualizzare ciò che ho salvato all'apertura dell'app.Questo e per la lettura
Dim testo As TextWriter
Dim leggi As TextReader
Dim lista as listview
Dim lst as list

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout ("Memo")
lst.Initialize
If File.Exists(File.DirDefaultExternal, "memo.txt") Then
leggi.Initialize(File.OpenInput(File.DirDefaultExternal, "memo.txt"))
lst = leggi.ReadList
For k = 0 To Lista.Size - 1
Lista.AddSingleLine(lst.Get(k))
Next
leggi.Close
End If

End Sub
_______________________________________________________________
questo per il salvataggio
Dim x As String
Dim k As Int
Dim Butsalva As Button
Dim Editmemo As EditText

Sub Butsalva_Click
x=Editmemo.Text
Lista.AddSingleLine(x)
testo.Initialize(File.OpenOutput(File.DirDefaultExternal, "memo.txt", True))
For k = 0 To Lista.Size - 1
testo.WriteLine(Lista.GetItem(k))
Next
Lista.clear
testo.Close
Msgbox("Salvato","Aggiungi")
Editmemo.Text=""

End Sub
_______________________________________________________________________
In tutto questo si aggiunge che :
Sub Lista_ItemLongClick (Position As Int, Value As Object)
Lista.RemoveAt(Position)

End Sub
mi cancella l'elemento aggiunto ma poi ritorna
 

LucaMs

Expert
Licensed User
Longtime User
Per postare codice, come hai fatto, dovresti usare:
[ CODE ]
' qui il codice
[ / CODE]

senza spazi - io ho dovuto scriverlo così

oppure, ancora più facile, usare la voce Code del menu:
upload_2016-8-4_13-48-14.png




Per quanto riguarda il mio zip, penso che dovrebbe funzionare anche se ti avverte che è stato scritto con una versione successiva di B4A. Se invece non lo avvia, ti basta copiare e incollare il codice in un tuo progetto 2.50.


Nella Activity_Create hai questa riga:
For k = 0 To lista.Size - 1

lista è la ListView (meglio usare dei prefissi nei nomi di variabile, per capire di che tipo siano; potrei pensare che sia di tipo List, no? Quindi meglio chiamarla lvLista)
ma è ovvio che all'avvio dell'Activity lista è vuoto quindi il ciclo non viene proprio effettuato. Per trovare gli errori nel tuo progetto, usa i Log("asdf") e magari lancia il programma in modo Debug, eseguendo una riga alla volta premendo F8).

Quindi quella riga deve essere sostituita da:
For k = 0 To lst.Size - 1
 
Last edited:

Antonio67

Member
Ciao luca, ho provato a cancellare lista.clear dal codice di lettura ma lo stesso non si visualizza cosa che fino all'ultima volta che ho provato si vedeva tutto cio che scrivevo, ho aggiunto lista.clear nel salva e mi ha risolto il problema degli elementi a doppio ma non per la visualizzazione. Eppure che io sappia il codice per la lettura e quello.:( come usare i log?
 

LucaMs

Expert
Licensed User
Longtime User
E dove avrei detto di eliminare lista.clear? :)

Nella Activity_Create hai questa riga:
For k = 0 To lista.Size - 1
Quindi quella riga deve essere sostituita da:
For k = 0 To lst.Size - 1


Log è un comando che ti consente di far scrivere nel Tab Log (a destra nell'ambiente di sviluppo). Ad esempio:

Log("Numero di elementi nella ListView lista: " & lista.size)
 

Antonio67

Member
If File.Exists(File.DirDefaultExternal, "memo.txt") Then
leggi.Initialize(File.OpenInput(File.DirDefaultExternal, "memo.txt"))
lst = leggi.ReadList
Lista.clear
For k = 0 To Lista.Size - 1
Lista.AddSingleLine(lst.Get(k))
Next
leggi.Close
End If
Ciao lord intenti così:)
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
B4X:
If File.Exists(File.DirDefaultExternal, "memo.txt") Then
       leggi.Initialize(File.OpenInput(File.DirDefaultExternal, "memo.txt"))
       lst = leggi.ReadList
       Lista.clear
       For k = 0 To Lst.Size - 1
              Lista.AddSingleLine(lst.Get(k))
       Next
       leggi.Close
End If
in questo modo, nel ciclo for/next non puoi usare lista.size, lista deve essere vuota perche la riempi con il for/next
il numero di elementi da inserire lo recuperi da lst
 
Last edited:
Top