Sto tentando di salvare alcuni dati dalla mia app in un semplice file di testo nell'area di archiviazione privata interna (preferenze utente dell'app). Ho letto molte domande qui (StackOverflow) e ho provato le soluzioni suggerite senza successo. La soluzione più semplice, a quanto pare, sarebbe quella suggerita qui:
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
ma non riesco a farlo funzionare sul mio dispositivo di test. Ho anche provato a creare il file usando i metodi disponibili in java.io.File con i metodi appropriati. Ho anche provato a creare il file sulla SDCard con lo stesso risultato, fallire. Ho provato molte soluzioni elencate in altre risposte, seguendo il codice e le istruzioni suggerite esattamente e trovando lo stesso risultato. Sto cominciando a sentire che mi manca qualche importante pezzo di codice, o di una bandiera impostazione da qualche parte, ho impostare l'autorizzazione nel file manifesto:
Scrittura nella memoria privata interna in Android
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Per essere chiari, Sto cercando di scrivere nella memoria privata interna del dispositivo. Si tratta di un file di piccole dimensioni contenente un nome, un numero di telefono e un paio di flag di tipo int
. Che cosa mai metodo che uso, mi sia trovare che il file non ha creato (o modificare se metto il file manualmente sul SDCard), o ottengo un NullPointerException quando cerco di fare riferimento al file o il file location:
private File fILE = new File("Mydata", main.FILENAME);
o
private File fILE = getDir("Mydata", 0);
sono in esecuzione il codice su un HTC Hero, aggiornato con l'ultima release del servizio da Sprint. Qualsiasi aiuto sarebbe GRANDE apprezzato, grazie in anticipo!
-Steve
Update (2/2/11): Usando un'EVO (API 8) Ho ancora ottenere un NullPointerException. Di seguito è riportato il codice che genera l'eccezione, eventuali dubbi sul motivo per cui la mia app non può accedere alla memoria interna? Ho questo problema su tre diversi dispositivi fisici utilizzando due livelli API (API 7 e 8).
File newfile = new File(this.getFilesDir() + "/data/files/", "sample.txt");
UPDATE 2: 2/4/11 - Ho scoperto che non riesco a vedere la struttura dei file sul (directory dei dati) dispositivo fisico in qualsiasi circostanza. Qualcuno ha qualche idea su questo? Il dispositivo è configurato correttamente e può eseguire l'app da eclissi o adb.
UPDATE 3: (2/9/11) - Penso di aver trovato il problema, ma non sono sicuro di come gestirlo. Ho capito che le autorizzazioni sulla directory/data/sui dispositivi fisici sono: drwxrwx--x
. Non sono sicuro del perché sia così, forse qualcosa con Sprint? Ho trovato questo set in questo modo su un HTC Hero, Samsung Epic (Galaxy S) e HTC EVO tutti su Sprint. Il problema sembra essere che DDMS e la mia app non hanno accesso r/w alla directory. Ho bisogno di capire due cose qui, perché è così e come superare questo problema in natura. Ancora una volta, qualsiasi aiuto qui sarebbe FANTASTICO !!
AGGIORNAMENTO 4: Penso che lo scorso febbraio sia stato un momento totalmente biondo per me (vedi AGGIORNAMENTO 3). I dispositivi di test che ho non sono ROOTed e quindi nessun accesso (DUH!). Dopo tutti gli aggiornamenti effettuati da SGS e EVO 4G, il risultato è sempre lo stesso. Sto ancora lavorando a questo problema e proverò a tornare qui con un aggiornamento a breve (si spera meno di un anno la prossima volta).
Si sta ricevendo un messaggio di errore quando si tentano questi metodi diversi o si sta semplicemente fallendo in modo silenzioso? –
Attualmente mi sto concentrando sulla modalità 'openFileOutput()' e sto ricevendo una NullPointerException. Sembra che la directory privata dei dati sul telefono sia bloccata per qualche motivo, non riesco nemmeno a guardare la directory; è come se niente crea lì. Le autorizzazioni sulla directory "data" sul telefono sono: "drwxrwx - x".Sto iniziando a chiedermi se c'è un'impostazione non valida sul telefono o qualcosa del genere. È un requisito dell'app che il file di dati scrive nella memoria interna, per compatibilità. – Kingsolmn
non sarà possibile accedere alla directory/data su un dispositivo fisico con DDMS a meno che non si disponga dell'accesso root ma si dovrebbe comunque essere in grado di scrivere su file dall'applicazione. cosa succede sull'emulatore? puoi scrivere un file ok? – techiServices