Autore Topic: Salvare informazioni su scheda SD  (Letto 1185 volte)

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Salvare informazioni su scheda SD
« il: 03 Dicembre 2014, 22:28:22 CET »
0
Allora, sto creando un applicazione che dovrebbe salvare, in una cartella a parte della scheda SD dei dati inseriti dall'utente in un EditText e successivamente all'immissione mostrare i dati nello spazio sottostante, in una listview, come potrei fare?

SDK del proggetto: 8

testando su un dispositivo di sdk 21

grazie in anticipo, Eskilop.

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:Salvare informazioni su scheda SD
« Risposta #1 il: 04 Dicembre 2014, 09:01:03 CET »
+1

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Re:Salvare informazioni su scheda SD
« Risposta #2 il: 04 Dicembre 2014, 11:09:26 CET »
0
Mi ero già documentato lì, ma non ho capito se le devo salvare su memoria esterna come faccio per "scriverli" su file e poi leggerli da file.. E soprattutto come popolare la listview con quei risultati..non vorrei usare le sharedPreferences perché dovrei memorizzare un vettore di tipo double, e con le shared preferences non credo sia possibile farlo, ed in più se l'utente cancella l'app i dati vengono persi..i database SQLite sono sconvenienti per quello che ci devo fare io, quindi l'unica sarebbe scriverla su file e leggerla da lì, quindi popolare la listview...

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:Salvare informazioni su scheda SD
« Risposta #3 il: 05 Dicembre 2014, 15:34:58 CET »
0
se ho capito bene mettendo quii parametri ogni file viene scritto automaticamente sulla scheda sd e quindi probabilmente leggi direttamente da li

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Salvare informazioni su scheda SD
« Risposta #4 il: 05 Dicembre 2014, 16:13:10 CET »
+1
External storage != Scheda SD

In tanti device External storage = Memoria Interna.

Da quanto ne so io la SD da kitkat non è scrivibile senza permessi di root.

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Re:Salvare informazioni su scheda SD
« Risposta #5 il: 06 Dicembre 2014, 13:33:32 CET »
0
se ho capito bene mettendo quii parametri ogni file viene scritto automaticamente sulla scheda sd e quindi probabilmente leggi direttamente da li
esattamente

Post unito: 06 Dicembre 2014, 13:35:21 CET
External storage != Scheda SD

In tanti device External storage = Memoria Interna.

Da quanto ne so io la SD da kitkat non è scrivibile senza permessi di root.
E questo anche lo sapevo, a me serve un modo per memorizzare i dati per fare in modo che anche se l'utente cancelli l'app quei dati rimangano lì così non li perde
« Ultima modifica: 06 Dicembre 2014, 13:35:21 CET da Eskilop, Reason: Merged DoublePost »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Salvare informazioni su scheda SD
« Risposta #6 il: 06 Dicembre 2014, 14:50:25 CET »
0
Beh allora dichiari i permessi write e read external storage poi a quel punto puoi salvare i dati nella memoria interna come preferisci (anche creare cartelle e così via). I dati rimangono anche se disinstalli la app. Salvi i dati così come faresti con qualsiasi applicazione java desktop.

 :-)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Salvare informazioni su scheda SD
« Risposta #7 il: 06 Dicembre 2014, 18:16:52 CET »
0
Se non sbaglio Environment.getExternaleStorage() ritornata la path per la memoria esterna ovvero SD. Pero nel caso sia assente (es moto x o nexus) ritorna la memoria intern . Che comunque per intenderci sarebbe la memoria che vedi quando connetti il decide al pc. Sembra di scrivere su SD ma stai scrivendo su memoria interna

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Re:Salvare informazioni su scheda SD
« Risposta #8 il: 06 Dicembre 2014, 18:52:24 CET »
0
Beh allora dichiari i permessi write e read external storage poi a quel punto puoi salvare i dati nella memoria interna come preferisci (anche creare cartelle e così via). I dati rimangono anche se disinstalli la app. Salvi i dati così come faresti con qualsiasi applicazione java desktop.

 :-)
Grazie mille undead, ma mi serve sapere ora, a livello di codice, come faccio salvarmi i dati? E per la lettura? (Sempre ammettendo che li debba salvare su un file ".txt")

Post unito: 06 Dicembre 2014, 18:53:16 CET
Se non sbaglio Environment.getExternaleStorage() ritornata la path per la memoria esterna ovvero SD. Pero nel caso sia assente (es moto x o nexus) ritorna la memoria intern . Che comunque per intenderci sarebbe la memoria che vedi quando connetti il decide al pc. Sembra di scrivere su SD ma stai scrivendo su memoria interna
Grazie tonno16, si, quella funzione ritorna esattamente la path della memoria esterna

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Salvare informazioni su scheda SD
« Risposta #9 il: 07 Dicembre 2014, 13:29:47 CET »
+1
Grazie mille undead, ma mi serve sapere ora, a livello di codice, come faccio salvarmi i dati? E per la lettura? (Sempre ammettendo che li debba salvare su un file ".txt")
Scrittura:
Codice (Java): [Seleziona]
// prendi il file handle
File mioFile = new File(pathMiofile);
// crei il file
mioFile.createNewFile();
// Prendi uno stream
FileOutputStream mioStream = new FileOutputStream(mioFile);
// Prendi uno scrittore sullo stream
OutputStreamWriter writer = new OutputStreamWriter(mioStream);
// Scrivi il testo
mioWriter.append(mioTesto);
// Chiudi lo scrittore
mioWriter.close();
// Chiudi lo stream
mioStream.close();
Lettura, sempre partendo dall'oggetto mioFile:
Codice (Java): [Seleziona]
StringBuilder testo = new StringBuilder();
FileReader fIn = new FileReader(mioFile)
BufferedReader reader = new BufferedReader(fIn);
String linea;

while ((linea = reader.readLine()) != null) {
        testo.append(linea);
        testo.append('\n');
}
reader.close();
:-)

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Re:Salvare informazioni su scheda SD
« Risposta #10 il: 07 Dicembre 2014, 14:37:08 CET »
0
Scrittura:
Codice (Java): [Seleziona]
// prendi il file handle
File mioFile = new File(pathMiofile);
// crei il file
mioFile.createNewFile();
// Prendi uno stream
FileOutputStream mioStream = new FileOutputStream(mioFile);
// Prendi uno scrittore sullo stream
OutputStreamWriter writer = new OutputStreamWriter(mioStream);
// Scrivi il testo
mioWriter.append(mioTesto);
// Chiudi lo scrittore
mioWriter.close();
// Chiudi lo stream
mioStream.close();
Lettura, sempre partendo dall'oggetto mioFile:
Codice (Java): [Seleziona]
StringBuilder testo = new StringBuilder();
FileReader fIn = new FileReader(mioFile)
BufferedReader reader = new BufferedReader(fIn);
String linea;

while ((linea = reader.readLine()) != null) {
        testo.append(linea);
        testo.append('\n');
}
reader.close();
:-)
Grazie Mille undead :D, l'ultima cosa, il metodo di lettura, funziona anche se mi dev prendere un dato specifico? Tipo come faccio a capire che in quella linea c'è il dato che mi serve? E poi, per popolarci la listview a livello di codice come faccio? Comunque grazie mille, è un po di tempo che giravo su internet per trovare la soluzione, almeno ora posso fare qualcosa di piu'  ;-)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Salvare informazioni su scheda SD
« Risposta #11 il: 07 Dicembre 2014, 16:29:37 CET »
0
Per popolarla dipende da cosa devi scriverci.
In generale se fai un dato per linea puoi sempre gestire ogni entry una linea.

Per esempio un int, una stringa e un float per ogny entry nella listview.

Per scrivere fai un for per tutti gli elementi, per ogni elementi nella listview fai un Integer.tostring(mioint) + "\n" + miaStringa+"\n" + Float.tostring(miofloat)+"\n";

In fase di rilettura tu ad ogni riga sai cosa devi fare...
int
string
float
int
string
float

Ogni 3 aggiungi un elemento alla lista.
E i successivi 3 li scrivi nell'elemento.

Se dividi per 3 hai l'indice dell'elemento
Se fai % 3 hai l'indice del valore all'interno dell'elemento (0 = int, 1 = string, 2 = float).

 :-)

Offline Eskilop

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5, samsung galaxy next turbo
  • Play Store ID:
    Eskilop
  • Sistema operativo:
    Windows 8, Ubuntu 14.10
Re:Salvare informazioni su scheda SD
« Risposta #12 il: 07 Dicembre 2014, 19:47:21 CET »
0
Per popolarla dipende da cosa devi scriverci.
In generale se fai un dato per linea puoi sempre gestire ogni entry una linea.

Per esempio un int, una stringa e un float per ogny entry nella listview.

Per scrivere fai un for per tutti gli elementi, per ogni elementi nella listview fai un Integer.tostring(mioint) + "\n" + miaStringa+"\n" + Float.tostring(miofloat)+"\n";

In fase di rilettura tu ad ogni riga sai cosa devi fare...
int
string
float
int
string
float

Ogni 3 aggiungi un elemento alla lista.
E i successivi 3 li scrivi nell'elemento.

Se dividi per 3 hai l'indice dell'elemento
Se fai % 3 hai l'indice del valore all'interno dell'elemento (0 = int, 1 = string, 2 = float).

 :-)
Grazie mille :D, adesso, la mia applicazione avrà 2 activity dove l'utente andrà ad inserire i suoi dati, in una ci metterà stringhe, nell'altra dei numeri di tipo double, ognuna di queste activity ha a disposizione la propria listview (scrollable) dove in una ovviamente ci saranno le stringhe e nell'altra dovrà mostrare i numeri (sarebbero euro, per intenderci) e per questa ho in mente di fare la listview e sotto di essa uno spazio dove verrà visualizzato il totale, quindi, forse è meglio creare due file, uno per le stringhe e l'altro per i double (anche perchè sono due activity diverse) e ora il mio problema è popolare la listview leggendo i dati dal file, come posso fare?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Salvare informazioni su scheda SD
« Risposta #13 il: 08 Dicembre 2014, 07:06:01 CET »
+1
Dividiere i file perché sono due activity non ha senso.
Io avevo un app che scriveva 3 float e un intero ogni tot millisec. Quindi avevi un file contenente i valori dell accellerometro campionato per qualche secondo.
Sapendo che ogni 3 numeri scrivevo un intero, quel l'intero rappresentava una x che definiva un tempo. In lettura sai che ogni riga dell adapter era definita leggendo 3 volte i float e una volta un intero.

Se non sbaglio avevo usato buffererInputStream....ma dipende come implementi.

Ti basta creare una normale listview seguendo un qualsiasi tutorial. E gli passi nell adapter la lista.

Crei un metodo che genere una Lista di integer se hai degli interi.

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Salvare informazioni su scheda SD
« Risposta #14 il: 08 Dicembre 2014, 20:04:59 CET »
+1
Tonno ha generalmente ragione ma dipende dal senso che hanno i dati.
Nel suo caso i dati erano correlati quindi aveva senso tenerli assieme.

Se io ho due activity, ognuna con una lista.. una con degli sms e una con i dati dell'accelerometro io faccio due files.
Lo faccio in primis perché gli sms e l'accelerometro non c'entrano niente tra loro, secondariamente perché anche le activity separate rispecchiano questa separazione.
Poi che l'sms abbia al suo interno una stringa, un numero di telefono e un orario è secondario.. accorperò questi dati in un unico file.

Diciamo che secondo me in questi casi "hanno ragione" i dati. I dati correlati stanno nello stesso file, poi vengono caricati in una struttura da questa si riempie la listview.

Dati che non hanno correlazione secondo me dovrebbero essere separati, per una questione di design.

Altrimenti la tua struttura deve tenere tutti i dati. Se ho una classe che ha sms+accelerometro ho creato un componente non riusabile. A livello di design è un errore grossolano.

 :-)