Autore Topic: Salvare un file dove voglio...  (Letto 3187 volte)

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Salvare un file dove voglio...
« il: 03 Aprile 2010, 14:25:26 CEST »
0
Buongiorno a tutti, ma quante domande ho da fare?! O_O
Sono arrivato a un buon punto della mia applicazione (un logger dei dati dei sensori accelerometrici), ora il mio problema è salvare i dati, ho creato un metodo per salvare su file che fa più o meno così:
Codice (Java): [Seleziona]
public void Write(Context context, String data){
        FileOutputStream fOut = null;
        OutputStreamWriter osw = null;
       
        try{
            File file = new File("/sdcard/acclog.txt");
            if(!file.exists() /*&& file.mkdir()*/) {
                file = new File("/sdcard/acclog.txt");
                if(!file.exists())
                file.createNewFile();
                }
            fOut = openFileOutput("/sdcard/acclog.txt",MODE_APPEND);      
            osw = new OutputStreamWriter(fOut);
            osw.write(data);
            osw.flush();
            //Toast.makeText(context, "Settings saved",Toast.LENGTH_SHORT).show();
            }
            catch (Exception e) {      
            e.printStackTrace();
            //Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show();
            }
            finally {
               try {
                      osw.close();
                      fOut.close();
                      } catch (IOException e) {
                      e.printStackTrace();
                      }
            }
       }

Inizialmente il path del file era solo: "acclog.txt" che se non erro dovrebbe salvare in /data/data/appname/files/ ma è molto più comodo per me che salvi sulla SD.
Ora: con il DDMS di Eclipse, non so perchè, non riesco a entrare nella cartella "data", clickandoci sopra semplicemente non succede niente  o_O, quindi non posso vedere il file (so che salva perchè decommentando i Toast, essi appaiono), se qualcuno ha suggerimenti su cosa fare in questo caso sono ben accetti.
EDIT: novità: digitando
Codice: [Seleziona]
adb pull /data/data/com.example.android.acclogger/files/acclog.txt acclog.txt da terminale, l'output è questo:
Codice: [Seleziona]
failed to copy '/data/data/com.example.android.acclogger/files/acclog.txt' to 'acclog.txt': Permission denied. e utilizzando una read del file ho certezza che esiste e che venga scritto correttamente...
Secondariamente, ma più importante, vorrei salvare il file nella SD, come già detto, ma quando modifico il path del file come l'ho linkato, l'applicazione non parte nemmeno, dicendo che c'è stato un non ben specificato errore...
cercando in giro in internet  ho trovato che si tratta di un problema di permessi e quindi ho aggiunto questa stringa nel Manifest dell'applicazione:
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ma non ha cambiato niente...
l'applicazione è praticamente bella e che finita, mi manca solo di esaltarmi leggendo righe su righe di dati di accelerometro scritti su un file  :-(

a proposito, quando sarà finita se interessa creo un post con tutto il codice, in caso possa servire a qualcuno o solo per curiosità. O:-)

grazie a chiunque si interessi al mio caso umano  :-o

RI-EDIT: utilizzando il codice trovato nel link postato qui sotto, viene creata una cartella con il nome del file "*.txt" vuota. Si, avete capito bene, vuota o_O
non so più veramente che pesci pigliare...ho dubbi esistenziali di ogni sorta...illuminatemi!!!  :'(

FINAL-EDIT: Il codice che uso al momento per salvare un file sulla memory card è il seguente:

Codice (Java): [Seleziona]
        private File sd = Environment.getExternalStorageDirectory();
        private File f = f = new File(sd, "nome_file.txt");

        public void write (String Data){
        FileWriter fw = null;
        BufferedWriter bw = null;
        try{
                fw = new FileWriter(f, true);
                bw = new BufferedWriter(fw);
                bw.write(Data);
                bw.close();
                fw.close();
            //Toast.makeText(context, "Settings saved",Toast.LENGTH_SHORT).show();
            }
            catch (IOException e) {      
            e.printStackTrace();
            //Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show();
            }
        }
E funziona correttamente. Non ricordo più le tappe intermedie che mi ci hanno portato perchè nel frattempo ho fatto mille e mille (cit. Ing. Cane) altre cose...  :-P Enjoy

p.s.: GRAZIE A TUTTI PER L'INTERESSE ALLA COSA.
« Ultima modifica: 15 Maggio 2010, 17:25:12 CEST da JD »

Offline pivot

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows
Re:Salvare un file dove voglio...
« Risposta #1 il: 03 Aprile 2010, 16:16:37 CEST »
0
Domanda banale, ma non si sa mai: hai creato l'sd card per l'emulatore?

http://developer.android.com/guide/developing/tools/emulator.html#sdcard

Poi preleva il path della sd con:

Codice (Java): [Seleziona]
Environment.getExternalStorageDirectory();
Poi se ti può essere d'aiuto ti riporto il link ad un esempio:
http://androidgps.blogspot.com/2008/09/writing-to-sd-card-in-android.html

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:Salvare un file dove voglio...
« Risposta #2 il: 03 Aprile 2010, 18:21:15 CEST »
0
Perdona se non l'ho precisato prima ma sto siluppando direttamente su device fisico,avendo la fortuna di essere munito di Nexus One dalla mia università per questo progetto,per cui niente problema con l'emulatore.
Ora sono di fretta e non posso guardare,più tardi do un'occhiata al link che hai postato (sperando non sia uno dei mille che ho visitato negli ultimi due giorni!  o_O )

grazie mille,a risentirci  ;-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Salvare un file dove voglio...
« Risposta #3 il: 20 Aprile 2010, 17:42:36 CEST »
0
Novità?
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:Salvare un file dove voglio...
« Risposta #4 il: 20 Aprile 2010, 18:40:19 CEST »
0
Perdona: ora edito il post iniziale inserendo [RISOLTO] e, per futuri babbi come me, inserisco il codice che funziona. Scusate se non ho fatto prima ma sono "leggermente" impegnato e non quando ho risolto il primo pensiero è stato "fiuuu..."  :-[, il secondo "WAAAAAAHHHH!!!" 8-), poi sono passato ai problemi successivi!  :-P

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[RISOLTO] Salvare un file dove voglio...
« Risposta #5 il: 20 Aprile 2010, 18:50:37 CEST »
0
Tranquillo, ti capisco benissimo, nessun problema :)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[RISOLTO] Salvare un file dove voglio...
« Risposta #6 il: 14 Maggio 2010, 12:56:23 CEST »
0
Ciao Scarface,
Ho trovato un bug nel codice del FINAL-EDIT: il File f non viene inizializzato e genera un NullPointerException.

Il codice completo dovrebbe essere questo:
Codice (Java): [Seleziona]
private File sd = Environment.getExternalStorageDirectory();
private File f = new File(sd, "file.txt");;

public void write (String Data){
        FileWriter fw = null;
        BufferedWriter bw = null;
        try{
                fw = new FileWriter(f, true);
                bw = new BufferedWriter(fw);
                bw.write(Data);
                bw.close();
                fw.close();
        }
        catch (IOException e) {      
                e.printStackTrace();
        }
}

AndroidManifest.xml:
Codice (XML): [Seleziona]
<uses-permission
                android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Un saluto e grazie ancora per aver condiviso questo codice  ;-)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:[RISOLTO] Salvare un file dove voglio...
« Risposta #7 il: 14 Maggio 2010, 14:13:10 CEST »
0
Purtroppo è un bug che affligge lo sviluppatore, non il codice  :-X

in realtà ho fatto un copia-incolla un po' sporco e siccome nel mio programma, il nome del file viene generato dinamicamente con data,ora ecc, non avendo riportato quella parte, manca l'inizializzazione del file, correggo con la tua giusta segnalazione.

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[RISOLTO] Salvare un file dove voglio...
« Risposta #8 il: 14 Maggio 2010, 17:25:31 CEST »
0
Ho aperto la sezione Snippets, se ti va aggiungilo anche li ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !