Autore Topic: Salvataggio preferences da AlertDialog  (Letto 541 volte)

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Salvataggio preferences da AlertDialog
« il: 03 Novembre 2011, 15:39:15 CET »
0
Ciao tutti, sono agli inizi della programmazione nell'ambiente android, e in questo momento sto riscontrando dei problemi nel salvataggio di dati per mezzo delle SharedPreferences.
Il mio obiettivo è il seguente, vorrei,attraverso un menù presente nell'attività principale aprire un custom dialog con due campi EditText e due pulsanti e una volta cliccato sul pulsante ok,salvare i dati inseriti nei campi,nelle "preferences" che poi mi serviranno per fare una chiamata al mio web service; riesco a creare il dialog ma non riesco a salvare i dati, credo che il problema è che non riesco a referenziare correttamente i due EditText, posto qui di seguito il codice della mia attività sperando che qualcuno possa aiutarmi

Codice (Java): [Seleziona]
public class ProfilePreferenceActivity extends Activity {
       
    private final static String LOG_TAG_FORM = "form";
       
    private final static String MY_PREFERENCES = "MyPref";
    private final static String PREF_MATRICOLA = "matricola";
    private final static String PREF_PIN = "pin";
   
    SharedPreferences prefs;
   
    LayoutInflater inflater;
   
    View layout;
   
    private EditText et_matricola;
    private EditText et_pin;
   
   
    String matricola;
    String pin;
   
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           
            startDialog();
     }
   
     private void getPrefs(){
           
            inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.prova,null);
           
            et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
            et_pin = (EditText) layout.findViewById(R.id.et_pin);
           
            prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
            et_matricola.setText(prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            et_matricola.setText(prefs.getString(PREF_PIN, "Nessun pin!"));
   }  
   
   
   
    protected void startDialog() {
 
            getPrefs();

            AlertDialog.Builder builder = new AlertDialog.Builder(this);

            inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.prova,null);
           
            et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
            et_pin = (EditText) layout.findViewById(R.id.et_pin);
           
            builder.setView(layout);
            builder.setIcon(R.drawable.profile);
            builder.setTitle("PROFILO");
           
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                               
                                prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                               
                                Editor editor = prefs.edit();
                               
                                editor.putString(PREF_MATRICOLA,et_matricola.getText().toString());
                                Log.i(LOG_TAG_FORM, et_matricola.getText().toString());
                               
                                editor.putString(PREF_PIN,et_pin.getText().toString());
                                Log.i(LOG_TAG_FORM, et_pin.getText().toString());
                               
                                editor.commit();
                               
                        }
                });
           
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                finish();
                        }
                });

            AlertDialog profileDialog = builder.create();
            profileDialog.show();
                       
        }
}

Nel LogCat non si verificano errori.

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
   android:layout_height="match_parent"
   android:layout_width="match_parent"
   android:orientation="vertical"
   android:gravity="center"
   android:id="@+id/root"
   xmlns:android="http://schemas.android.com/apk/res/android" android:background="#000000">
    <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/tv_matricola"
       android:text="@string/matricola_label"
       android:textStyle="bold" android:textColor="#ffffff"/>
    <EditText
       android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:id="@+id/et_matricola"/>
    <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/tv_pin"
       android:text="@string/pin_label"
       android:textStyle="bold" android:textColor="#ffffff"/>
    <EditText
       android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:id="@+id/et_pin"
       android:inputType="textPassword" />
   
</LinearLayout>


Ringrazio in anticipo chi mi aiuterà e mi scuso se sto chiedendo una cosa banale, ma sono alle prime armi.

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Salvataggio preferences da AlertDialog
« Risposta #1 il: 04 Novembre 2011, 12:05:47 CET »
0
Non c'è proprio nessuno che sa darmi qualche consiglio?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Salvataggio preferences da AlertDialog
« Risposta #2 il: 04 Novembre 2011, 12:15:09 CET »
0
Non uppare i post dopo così poco tempo ;)


Comunque, io proverei a cambiare il metodo onClick in questo modo:

Codice (Java): [Seleziona]
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                    EditText matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
                    EditText pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);
                   
                    prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                   
                    Editor editor = prefs.edit();
                   
                    editor.putString(PREF_MATRICOLA, matricola.getText().toString());
                    Log.i(LOG_TAG_FORM, matricola.getText().toString());
                   
                    editor.putString(PREF_PIN, pin.getText().toString());
                    Log.i(LOG_TAG_FORM, pin.getText().toString());
                   
                    editor.commit();
                   
            }
    });

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Salvataggio preferences da AlertDialog
« Risposta #3 il: 04 Novembre 2011, 14:44:38 CET »
0
Scusami non lo sapevo, comunque facendo come mi hai suggerito sono riuscito a salvare i due input nelle "preferences" però adesso non riesco a recuperare i valori salvati, o meglio riesco a recuperarli ma non riesco ad aggiornare gli EditText del Dialog con i valori presenti nelle "preferences".
La parte di codice relativa sarebbe questa:

Codice (Java): [Seleziona]
private void getPrefs(){
           
            LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            View layout = inflater.inflate(R.layout.prova,null);
           
            EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
            EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);
           
            SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
            et_matricola.setText(prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            et_matricola.setText(prefs.getString(PREF_PIN, "Nessun pin!"));
   }

Il valore riesco ad estrarlo dalla preferences ma non riesco a settarlo relativamente all'EditText.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Salvataggio preferences da AlertDialog
« Risposta #4 il: 04 Novembre 2011, 14:50:26 CET »
0
Riposta tutto il codice.

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Salvataggio preferences da AlertDialog
« Risposta #5 il: 04 Novembre 2011, 15:12:07 CET »
0
Ok, ecco il codice:

Codice (Java): [Seleziona]
public class ProfilePreferenceActivity extends Activity {
       
        private final static String LOG_TAG_FORM = "form";
       
    private final static String MY_PREFERENCES = "prefProfilo";
    private final static String PREF_MATRICOLA = "matricola";
    private final static String PREF_PIN = "pin";
   
    LayoutInflater inflater;
    View layout;
   
    String matricola;
    String pin;
   
       
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
               
                getPrefs();
                startDialog();
     }
   
   
   
    private void getPrefs(AlertDialog profileDialog){
           
            inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.prova,null);*/
           
            EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
            EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);
               
            SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
            et_matricola.setText(prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            et_pin.setText(prefs.getString(PREF_PIN, "Nessun pin!"));
               
            Log.i(LOG_TAG_FORM, prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            Log.i(LOG_TAG_FORM, prefs.getString(PREF_PIN, "Nessun pin!"));
   }  
   
   
   
    protected void startDialog() {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);

            inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.prova,null);
           
            builder.setView(layout);
            builder.setIcon(R.drawable.profile);
            builder.setTitle("PROFILO");
           
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                    EditText et_matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
                    EditText et_pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);
                   
                    SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                   
                    Editor editor = prefs.edit();
                   
                    editor.putString(PREF_MATRICOLA, et_matricola.getText().toString());
                    //Log.i(LOG_TAG_FORM, et_matricola.getText().toString());
                   
                    editor.putString(PREF_PIN, et_pin.getText().toString());
                    //Log.i(LOG_TAG_FORM, et_pin.getText().toString());
                   
                    editor.commit();
            }
            });
           
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                finish();
                        }
                });

            AlertDialog profileDialog = builder.create();
            profileDialog.show();
               
        }
}

Mentre questo è il file .xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
   android:layout_height="match_parent"
   android:layout_width="match_parent"
   android:orientation="vertical"
   android:gravity="center"
   android:id="@+id/root"
   xmlns:android="http://schemas.android.com/apk/res/android" android:background="#000000">
    <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/tv_matricola"
       android:text="@string/matricola_label"
       android:textStyle="bold" android:textColor="#ffffff"/>
    <EditText
       android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:id="@+id/et_matricola"/>
    <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/tv_pin"
       android:text="@string/pin_label"
       android:textStyle="bold" android:textColor="#ffffff"/>
    <EditText
       android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:id="@+id/et_pin"
       android:inputType="textPassword" />
   
</LinearLayout>

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Salvataggio preferences da AlertDialog
« Risposta #6 il: 04 Novembre 2011, 15:48:06 CET »
0
Non dovresti sostituire questo:

Codice: [Seleziona]
EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);

con questo:

Codice: [Seleziona]
EditText et_matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
EditText et_pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);


Sembra che li prendi da due posti diversi.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Salvataggio preferences da AlertDialog
« Risposta #7 il: 04 Novembre 2011, 16:05:39 CET »
0
Codice (Java): [Seleziona]
public class ProfilePreferenceActivity extends Activity {
       
        private final static String LOG_TAG_FORM = "form";
       
    private final static String MY_PREFERENCES = "prefProfilo";
    private final static String PREF_MATRICOLA = "matricola";
    private final static String PREF_PIN = "pin";
   
    LayoutInflater inflater;
    View layout;
   
    String matricola;
    String pin;
   
       
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
       
                startDialog();
     }
       
    protected void startDialog() {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);

            inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.prova,null);
           
            EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
            EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);
               
            SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
            et_matricola.setText(prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            et_pin.setText(prefs.getString(PREF_PIN, "Nessun pin!"));
               
            Log.i(LOG_TAG_FORM, prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
            Log.i(LOG_TAG_FORM, prefs.getString(PREF_PIN, "Nessun pin!"));

            builder.setView(layout);
            builder.setIcon(R.drawable.profile);
            builder.setTitle("PROFILO");
           
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                    EditText et_matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
                    EditText et_pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);
                   
                    SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                   
                    Editor editor = prefs.edit();
                   
                    editor.putString(PREF_MATRICOLA, et_matricola.getText().toString());
                    //Log.i(LOG_TAG_FORM, et_matricola.getText().toString());
                   
                    editor.putString(PREF_PIN, et_pin.getText().toString());
                    //Log.i(LOG_TAG_FORM, et_pin.getText().toString());
                   
                    editor.commit();
            }
            });
           
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                finish();
                        }
                });

            AlertDialog profileDialog = builder.create();
            profileDialog.show();
               
        }
}

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Salvataggio preferences da AlertDialog
« Risposta #8 il: 04 Novembre 2011, 16:30:31 CET »
0
Grazie mille, adesso funziona!