Salviamo dei dati nella memoria interna Android (variabili ritentive)

Capita alle volte di voler salvare dei dati così da non perdere il loro valore in un secondo momento.
Android dispone di un comando molto semplice per scrivere dei valori in formato testo nella memoria interna del dispositivo, in questo caso all’interno dei nostri pannelli Ltouch e pLtouch e successivamente recuperarli.

Premetto che questa procedura rende i dati che andiamo a salvare privati, ciò vuol dire che solamente la nostra app potrà accedervi e nessun’altra e nel momento in cui la disinstalleremo tutti i dati verranno persi.

Troverete molto utile questo Tutorial

Android dispone delle classi openFileInput e openFileOutput per scambiare dei pacchetti alla memoria interna.

  •  openFileOutput : è il metodo per creare e salvare un file
FileOutputStream fOut = openFileOutput("file name",Context.MODE_PRIVATE);

Il metodo restituisce un’istanza FileOutputStream, così è possibile richiamarla e scrivere i dati sul file:

String str = "test data";
fOut.write(str.getBytes());
fOut.close();
  • openFileInput () : Questo metodo viene utilizzato per aprire un file e leggerlo. Tale restituisce un’istanza di FileInputStream.
FileInputStream fin = openFileInput(file)

Dopodichè chiamamiamo quest’isanza per leggere un carattere alla volta e rappresentarlo:

int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
fin.close();

Vediamo ora un esempio pratico:

Supponiamo che si voglia salvare un dato e renderlo nel gergo tecnico dei plc ” ritentivo “, in poche parole che al riavvio della nostra app il dato non si perda, ma che si possa recuperarlo.
Salviamo il dato alla pressione di un bottone:

@Override
	public void onClick(View v) {
             if (v.getId()==R.id.btnWrite){
                 // add-write text into file
        try {
            FileOutputStream fileout=openFileOutput("BieMmeItalia.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write("250");
            outputWriter.close();

            //display file saved message
            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

All’avvio dell’app andiamo a leggere il valore nel file di testo allocato nella memoria del dispostivo e poi lo rappresentiamo a video tramite una texView:

	@Override
    protected void onCreate(Bundle savedInstanceState) {
			    requestWindowFeature(Window.FEATURE_NO_TITLE);
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_main);

			TextView valreadtoMemory = (TextView)findViewById(R.id.editText1);
		try {
	            FileInputStream fileIn=openFileInput("BieMmeItalia.txt");
	            InputStreamReader InputRead= new InputStreamReader(fileIn);

	            char[] inputBuffer= new char[READ_BLOCK_SIZE];
	            String s1="";
	            int charRead;

	            while ((charRead=InputRead.read(inputBuffer))>0) {
	                // char to string conversion
	                String readstring=String.copyValueOf(inputBuffer,0,charRead);
	                s1 +=readstring;
	           }
	            InputRead.close();
	            valreadtoMemory.setText(s1);

	        } catch (Exception e) {
	            e.printStackTrace();
	        }

    }

Per maggior informazioni troverete del materiale anche nel nostro WiKi