Autore Topic: Shared Preferences  (Letto 1462 volte)

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Shared Preferences
« il: 02 Settembre 2013, 17:56:55 CEST »
0
In un'activity stò utilizzando le Shared Preferences per memorizzare dei valori in una textview (tramite edittext permetto di inserire i valori).

Ora in un'altra activity inserisco dei valori nel db e tramite 2 radio button gestisco in quali campi inserire i dati...

Il mio scopo ora è che se viene inserito il valore, dopo aver scelto il radio button1, lo stesso valore venga sommato a quello immesso con la Shared Preferences, viceversa se si è scelto il radio button2 il valore della Shared Preferences deve essere sottratto.

Avete qualche idea???
Non so se mi sono spiegato bene
Grazie

Offline matttt

Re:Shared Preferences
« Risposta #1 il: 02 Settembre 2013, 20:14:10 CEST »
0
Allora... tradotto in pseudo-linguaggio:
- prelevi valore1 dall'EditText;
- prelevi valore2 da SharedPref;
- se radio_button1, valore3 = valore1 + valore2;
- se radio_button2, valore3 = valore1 - valore2;
?

Traduci in codice e hai fatto :)
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #2 il: 02 Settembre 2013, 20:43:23 CEST »
0
Questo è il codice per la preferences, non riesco a modificarlo facendo in modo che se radio1 è selezionato deve sommare il valore della edittext "mImporto"alla textview che si trova in un'altra activity, e se è selezionato radio2 deve sottrarlo, riesci a darmi una mano??
Codice (Java): [Seleziona]
/////////inizio prefrences     
                if (((CheckBox) v).isChecked()) {
                // Richiamiamo la nostra preferenza tramite il nome
                SharedPreferences prefs = getSharedPreferences(SharedPrefName, 0);
               
                // Per poterla editare abbiamo bisogno di un oggetto Editor che ci � fornito dalla SP stessa
                SharedPreferences.Editor prefsEditor = prefs.edit();
               
                // Inseriamo tutte le righe chiave/valore di cui necessitiamo
                prefsEditor.putString("Importo", mImporto.getText().toString());
               
                // Eseguiamo il commit per scrivere effettivamente nel file
                prefsEditor.commit();
                /////////fine prefrences       

Offline Giak

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    transformer tf101
  • Sistema operativo:
    ubuntu 12.10
Re:Shared Preferences
« Risposta #3 il: 02 Settembre 2013, 20:49:05 CEST »
0
sii più preciso non si capisce dove sia la difficoltà. magari se posti il codice nella sua interezza lo campiamo meglio e riusciamo ad aiutarti.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #4 il: 02 Settembre 2013, 20:58:29 CEST »
0
Questo è parte del codice dove ci sono i radio button per la scelta delle colonne in cui  inserire i valori nel db
Codice (Java): [Seleziona]
ContentValues cv = new ContentValues(2);
               
                if (mImporto.getText().toString().equals("")
                                || mDataScelta.getText().toString().equals("")) {
                       
                        Toast.makeText(this, getString(R.string.Toast_inserisci) , Toast.LENGTH_SHORT).show();
                               
                } else {
                       
                cv.put(GTable.DATA, mDataScelta.getText().toString());
                if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio_euro1) {
                        cv.put(GTable.EURO1, mImporto.getText().toString());
                        cv.put(GTable.NOTE, mNote.getText().toString());
                       
                } else {
                        cv.put(GTable.EURO2, mImporto.getText().toString());
                        cv.put(GTable.NOTE, mNote.getText().toString());
                }

                SQLiteDatabase db = mHelper.getWritableDatabase();
quindi se viene selezionato uno dei 2 radio tramite la shared devo sommare o sottrarre quel valore inserito "mImporto" in una textview che si trova in un'altra activity

Offline matttt

Re:Shared Preferences
« Risposta #5 il: 02 Settembre 2013, 21:10:29 CEST »
0
Attenzione però che è rischioso prelevare valori da una View di un'altra Activity (anche fosse quella padre), ci sono situazioni in cui puoi perdere riferimenti (come quando avviene una rotazione).
Ti conviene piuttosto prendere il valore dalla TextView nell'Activity1 e trasmetterlo come parametro alla Activity2 (con intent.putExtra) quando stai aprendo Activity2.
O viceversa ritornare il valore della TextView di Activity1 in Activity2 tramite onActivityResult()
Per il resto non dovrebbe essere complicato.
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #6 il: 02 Settembre 2013, 21:21:13 CEST »
0
Aspetta non ho capito...io inserisco i dati nella shared e la richiamo semplicemente in un'altra activity.Non è il modo giusto??

Offline matttt

Re:Shared Preferences
« Risposta #7 il: 02 Settembre 2013, 22:01:35 CEST »
0
Se passi tramite SharedPref è ok.
Avevo capito che volevi prendere il valore direttamente da una TextView posizionata in un'altra Activity.

Cosa non ti riesce cmq?
Non mi sembra difficile quel che vuoi fare.
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #8 il: 02 Settembre 2013, 22:05:27 CEST »
0
Ho fatto così, il logcat non dà errori quindi sicuramente il codice non viene eseguito...dov'è il problema??
Codice (Java): [Seleziona]
ContentValues cv = new ContentValues(2);
               
                if (mImporto.getText().toString().equals("")
                                || mDataScelta.getText().toString().equals("")) {
                       
                        Toast.makeText(this, getString(R.string.Toast_inserisci) , Toast.LENGTH_SHORT).show();
                               
                } else {
                       
                cv.put(GTable.DATA, mDataScelta.getText().toString());
                if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio_entrata) {
                        cv.put(GTable.ENTRATA, mImporto.getText().toString());
                        cv.put(GTable.NOTE, mNote.getText().toString());
                       
                        /////////inizio prefrences/////////////////////////////////////////////////////
                        if(check.isChecked()) {
                        // Richiamiamo la nostra preferenza tramite il nome
                        SharedPreferences prefs = getSharedPreferences(SharedPrefName, 0);
                       
                        // Per poterla editare abbiamo bisogno di un oggetto Editor che ci � fornito dalla SP stessa
                        SharedPreferences.Editor prefsEditor = prefs.edit();
                       
                        // Inseriamo tutte le righe chiave/valore di cui necessitiamo
                        prefsEditor.putString("Importo", mImporto.getText().toString());
                       
                        // Eseguiamo il commit per scrivere effettivamente nel file
                        prefsEditor.commit();
                        /////////fine prefrences///////////////////////////////////////////////////////        
                                               
                        }                      
                       
                } else {
                        cv.put(GTable.USCITA, mImporto.getText().toString());
                        cv.put(GTable.NOTE, mNote.getText().toString());
                }

                SQLiteDatabase db = mHelper.getWritableDatabase();
« Ultima modifica: 03 Settembre 2013, 12:59:13 CEST da Kecco11 »

Offline matttt

Re:Shared Preferences
« Risposta #9 il: 03 Settembre 2013, 14:13:06 CEST »
0
Prima cosa... se hai dubbi se una parte di codice viene eseguita o meno usa più Log.d(), non costa nulla :)
Piazzane uno sia prima del controllo del RadioButton attivo che prima della parte delle SharedPref.
Sicuro poi di quella riga:
Codice (Java): [Seleziona]
if(check.isChecked()) {Non vedo il codice relativo a quella variabile check.
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #10 il: 03 Settembre 2013, 14:22:35 CEST »
0
Così funziona sia se seleziono il radio 1 o il radio 2.
Ora mi manca solo la funzione che se il radio 1 è selezionato deve sommare il valore alla shared altrimenti deve sottrarlo.
Riesci ad indicarmi qualcosa??
Codice (Java): [Seleziona]
cv.put(GiornateTable.DATA, mDataScelta.getText().toString());
                if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio_entrata) {
                        cv.put(GiornateTable.ENTRATA, mImporto.getText().toString());
                        cv.put(GiornateTable.NOTE, mNote.getText().toString());
                       
                        /////////inizio prefrences/////////////////////////////////////////////////////
                        if(check.isChecked()) {
                        // Richiamiamo la nostra preferenza tramite il nome
                        SharedPreferences prefs = getSharedPreferences(SharedPrefName, 0);
                       
                        // Per poterla editare abbiamo bisogno di un oggetto Editor che ci � fornito dalla SP stessa
                        SharedPreferences.Editor prefsEditor = prefs.edit();
                       
                        // Inseriamo tutte le righe chiave/valore di cui necessitiamo
                        prefsEditor.putString("Importo", mImporto.getText().toString());
                       
                        // Eseguiamo il commit per scrivere effettivamente nel file
                        prefsEditor.commit();
                        /////////fine prefrences///////////////////////////////////////////////////////        
                        }
                       
                       
                } else {
                        cv.put(GiornateTable.USCITA, mImporto.getText().toString());
                        cv.put(GiornateTable.NOTE, mNote.getText().toString());
                       
                        /////////inizio prefrences/////////////////////////////////////////////////////
                        if(check.isChecked()) {
                        // Richiamiamo la nostra preferenza tramite il nome
                        SharedPreferences prefs = getSharedPreferences(SharedPrefName, 0);
                               
                        // Per poterla editare abbiamo bisogno di un oggetto Editor che ci � fornito dalla SP stessa
                        SharedPreferences.Editor prefsEditor = prefs.edit();
                               
                        // Inseriamo tutte le righe chiave/valore di cui necessitiamo
                        prefsEditor.putString("Importo", mImporto.getText().toString());
                               
                        // Eseguiamo il commit per scrivere effettivamente nel file
                        prefsEditor.commit();
                        /////////fine prefrences///////////////////////////////////////////////////////        
                                }
                }

                SQLiteDatabase db = mHelper.getWritableDatabase();
« Ultima modifica: 03 Settembre 2013, 15:59:18 CEST da Kecco11 »

Offline matttt

Re:Shared Preferences
« Risposta #11 il: 03 Settembre 2013, 17:40:02 CEST »
0
Ok, allora ignoro quel check...

Se "Importo" è un campo numerico (magari con la virgola) ti conviene usare putFloat piuttosto e lavorare con valori float.
Puoi fare così:
Codice (Java): [Seleziona]
float importo = prefs.getFloat( "Importo", 0 );    // 0 = valore di default nel caso in cui non sia stata trovata alcuna preferenza con quella chiave
SharedPreferences.Editor prefsEditor = prefs.edit();
if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio_entrata)
{
    prefsEditor.putFloat( "Importo", importo + tuo_valore );
    prefsEditor.commit();
}
else if (mRadioGroup.getCheckedRadioButtonId() == R.id.radio_uscita)
{
    prefsEditor.putFloat( "Importo", importo - tuo_valore );
    prefsEditor.commit();
}

Ok?

Aggiungo che se "tuo_valore" lo prendi da un EditText per convertire la stringa in float puoi usare Float.parseFloat( STRINGA_NUMERICA ); (e gestire l'eccezione nel caso in cui la stringa non sia un float corretto)
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #12 il: 03 Settembre 2013, 21:42:01 CEST »
0
Scusa la mia solita ignoranza, perchè putFloat lo dà come errore e putString no??

Offline matttt

Re:Shared Preferences
« Risposta #13 il: 03 Settembre 2013, 21:44:13 CEST »
0
In che senso lo da come errore?

Nell'ultima riga del mio post precedente ti parlavo di parseFloat() - la funzione che converta una stringa in float - che se gli dai una stringa tipo "abc" non sa come convertirla in numero float e genera quindi un eccezione...
Le mie apps su Google Play Store:

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:Shared Preferences
« Risposta #14 il: 03 Settembre 2013, 21:49:04 CEST »
0
credo che non serve parseFloat perchè in ingresso ho solo numeri con la virgola, in pratica segna rosso "putFloat" e non dà suggerimenti..