Autore Topic: Scrittura e lettura su Internal Storage  (Letto 1208 volte)

Offline darko

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s4
  • Sistema operativo:
    Windows 7
Scrittura e lettura su Internal Storage
« il: 02 Gennaio 2014, 00:41:29 CET »
0
Salve a tutti, ho finito la mia app gratuita e quindi sono passato a installare i banner pubblicitari. Quello che avevo in mento oltre al solito admob è un vAd di mobfox, ovvero un video...il problema è che un vAd non porta molte valutazioni positive, anzi, e quindi avevo pensato di fare in modo che 1 volta su 10 aperture della app comparisse un AlertDialog che chiedeva un sostegno per lo sviluppatore. Per fare ciò ho pensato di creare un file di testo (.txt) in cui salvare e poi rileggere il numero di aperture della app, o meglio il numero di chiusure tramite la funzione onBackPressed.
Qui compare il problema: io ho fatto così per leggere
Codice (Java): [Seleziona]
int ch;
        StringBuffer fileContent = new StringBuffer("");
                FileInputStream fis;
                try {
                        fis = openFileInput(file);
                        while( (ch = fis.read()) != -1)
                                  fileContent.append((char)ch);
                }
                catch (FileNotFoundException e) {
                }
                catch (IOException e) {
                }
        String content = new String(fileContent);
e così per scrivere:
Codice (Java): [Seleziona]
try {
                        FileOutputStream fos = openFileOutput(file, Context.MODE_PRIVATE);
                fos.write(string.getBytes());
                fos.close();
                }
                catch (FileNotFoundException e) {
                }
                catch (IOException e) {
                }
entrambe quindi leggono e scrivono sulla variabile file che ho dichiarato di tipo string
Codice (Java): [Seleziona]
String file="file.txt";
Questo funziona benissimo sull'emulatore, infatti apre l'AlertDialog 1 volta su 10, mentre appena passo il file .apk al mio samsung galaxy s4 per provare il funzionamento anche su di esso, l'app si installa ma appena la avvio si chiude dicendomi "Il programma è stato arrestato". Qual è il problema? Perché nell'emulatore funziona e nel dispositivo fisico no? Ho pensato che bisognasse includere qualche permesso ma ho cercato e ho visto che c'è il permesso per l'External Storage e non per l'Internal, quindi ho lasciato perdere i permessi e ho pensato che si trattasse di qualche altro errore...cosa può essere??

p.s. nel mio programma io prima leggo e poi scrivo, quindi al primo avvio ovviamente si solleverà l'eccezione FileNotFoundException, però siccome quando si solleva l'eccezione il programma non fa niente in teoria esso continua con il codice sotto fino ad arrivare alla chiusura della app e quindi alla creazione e alla scrittura nel file, in questo modo dalla seconda apertura della app in poi non ci saranno più eccezioni e quindi il programma dovrebbe funzionare bene...che il problema sia questa mia scelta?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Scrittura e lettura su Internal Storage
« Risposta #1 il: 02 Gennaio 2014, 09:51:47 CET »
0
Invece del file, usa le SharedPreferences, è tutto molto più semplice ed affidabile.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline darko

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s4
  • Sistema operativo:
    Windows 7
Re:Scrittura e lettura su Internal Storage
« Risposta #2 il: 02 Gennaio 2014, 13:47:48 CET »
0
Grazie mille, devo ammettere che ho sostituito il tutto con 2 righe per leggere e due per scrivere  ;-) ora vorrei sapere come fare in modo che alla prima apertura non venga fuori l'avviso ma solo alla 10, perché facendo così:
Codice (Java): [Seleziona]
SharedPreferences settings = getPreferences(0);
        int contatore = settings.getInt("silentMode", 0);
        if(contatore>=10) {
               //istruzioni dialog
         }

l'alertdialog compare la prima volta e poi ogni 10, come faccio a fare apparire l'alert la prima volta alla 10° apertura e poi sempre ogni 10?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Scrittura e lettura su Internal Storage
« Risposta #3 il: 02 Gennaio 2014, 15:13:04 CET »
0
Che ti appaia la prima volta mi sembra strano, visto che metti esplicitamente "contatore >=10" nella condizione dell'if.

Comunque la traduzione in codice delle tue condizioni è questa: la prima parte evita l'apertura quando contatore è a 0, la seconda la fa accadere una volta ogni 10.

Codice (Java): [Seleziona]
if ((contatore!=0)&&((contatore%10)==0))
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline darko

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s4
  • Sistema operativo:
    Windows 7
Re:Scrittura e lettura su Internal Storage
« Risposta #4 il: 02 Gennaio 2014, 16:00:30 CET »
0
Grazie mille, in questo modo funziona alla perfezione  ;-)