Autore Topic: Problema sharedpreferences AIUTO  (Letto 1852 volte)

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Problema sharedpreferences AIUTO
« il: 07 Marzo 2012, 00:47:30 CET »
0
Aiutatemi, non riesco proprio a capire qual'è il problema.

Vorrei semplicemente salvare il contenuto di un editText in usa stringa e memorizzarla con la sharedPreferences in modo che rimanga sempre salvata.( QUESTO L'HO FATTO BENE CREDO)

Il problema sta dopo, quando voglio richiamare questa stinga in un altra classe, non m da nessun errore, solo che non viene modificata, cioè sembra che non la salvi.

DOVE SBAGLIO?? VI POSTO IL CODICE. HELP!

Codice: [Seleziona]
package michele.android;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ModificaServer extends Activity {
       
        private final static String MY_PREFERENCES = "MyPref";
        public final static String ind = "192.168.33";



        Context context = this;
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modificaserver);
       
       
       
        Button butt1 = (Button)this.findViewById(R.id.ButtonInviaModServer);
        butt1.setOnClickListener(new OnClickListener() {
               
               
               
                public void onClick(View v) {
                       
                        // Otteniamo il riferimento alle Preferences
                            SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
                            // Otteniamo il corrispondente Editor
                            SharedPreferences.Editor editor = prefs.edit();
                            // Modifichiamo il valore con quello inserito nell'EditText
                            EditText editTextModIP = (EditText) findViewById(R.id.EditTextIndirIP);
                            CharSequence indirizzo = editTextModIP.getText();
                           
                           
                                    // Lo salviamo nelle Preferences
                            if (indirizzo != null) {
                                       editor.putString(ind, indirizzo.toString());
                                       editor.commit();
                                       Toast.makeText(ModificaServer.this,"IP salvato correttamente",Toast.LENGTH_LONG).show();
                                    }
                           
                           
                       Intent myIntent = new Intent(context, inizio.class);
                        startActivityForResult(myIntent, 0);
       
                   }                           
        });
       
       
        }
}


QUESTA LA CLASSE CHE RICHIAMA QUELLA STRINGA:

Codice: [Seleziona]
package michele.android;



class conn {
       
public String conn = "jdbc:jtds:sqlserver://"+ModificaServer.ind+":1433/PizzaBase;instance=SQLEXPRESS;";
       
}
                   

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Problema sharedpreferences AIUTO
« Risposta #1 il: 07 Marzo 2012, 01:36:01 CET »
0
Scusa ma nella classe che richiama la preferenza salvata...dov'è il codice che  recupera la preferenza o_O ? E in che senso "non viene modificata" ?

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problema sharedpreferences AIUTO
« Risposta #2 il: 07 Marzo 2012, 08:05:26 CET »
0
Con queste istruzioni:

Codice: [Seleziona]
editor.putString(ind, indirizzo.toString());
editor.commit();

vai a salvare con la chiave "ind" la stringa "indirizzo.toString()".
Per andare a riprendere il valore devi fare:

Codice: [Seleziona]
editor.getString(ind, "Valore di default");

cosi' ti ritorna il tuo valore se ce l'ha altrimenti ti ritorna "Valore di default".

Nel tuo caso:

Codice: [Seleziona]
class conn {
       
public String conn = "jdbc:jtds:sqlserver://"+ModificaServer.ind+":1433/PizzaBase;instance=SQLEXPRESS;";
       
}

ModificaServer.ind non e' il valore salvato ma la chiave che hai usato per salvarlo.

Chiaro?

Saluti
I numeri contano molto di più del seme.

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #3 il: 07 Marzo 2012, 10:00:09 CET »
0
Non è vero, non esiste il metodo getString per editor!!

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #4 il: 07 Marzo 2012, 10:00:41 CET »
0
Con queste istruzioni:

Codice: [Seleziona]
editor.putString(ind, indirizzo.toString());
editor.commit();

vai a salvare con la chiave "ind" la stringa "indirizzo.toString()".
Per andare a riprendere il valore devi fare:

Codice: [Seleziona]
editor.getString(ind, "Valore di default");

cosi' ti ritorna il tuo valore se ce l'ha altrimenti ti ritorna "Valore di default".

Nel tuo caso:

Codice: [Seleziona]
class conn {
       
public String conn = "jdbc:jtds:sqlserver://"+ModificaServer.ind+":1433/PizzaBase;instance=SQLEXPRESS;";
       
}

ModificaServer.ind non e' il valore salvato ma la chiave che hai usato per salvarlo.

Chiaro?

Saluti

Non è vero, non esiste il metodo getString per editor!!

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Problema sharedpreferences AIUTO
« Risposta #5 il: 07 Marzo 2012, 10:16:02 CET »
+1
Devi fare così:

Codice (Java): [Seleziona]
SharedPreferences prefs = getSharedPreferences(MY_PREFS, Context.MODE_PRIVATE);
String miastringa = prefs.getString(ind,"ValoreDiDefaultInCasoNonCiFosseNullaSalvato");

 :-)

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problema sharedpreferences AIUTO
« Risposta #6 il: 07 Marzo 2012, 10:37:16 CET »
+1
Non è vero, non esiste il metodo getString per editor!!

Vero scusa nella fretta ho dimenticato di mettere che editor nel secondo caso era un oggetto di tipo SharedPreferences.

Guarda la risposta di undead, devi fare cosi'.

Saluti.
I numeri contano molto di più del seme.

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #7 il: 07 Marzo 2012, 14:14:29 CET »
0
Vero scusa nella fretta ho dimenticato di mettere che editor nel secondo caso era un oggetto di tipo SharedPreferences.

Guarda la risposta di undead, devi fare cosi'.

Saluti.

Ho fatto così, ma ora mi da errore android crasha e non capisco perchè!!

Codice: [Seleziona]
package michele.android;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ModificaServer extends Activity {
       
        private final static String MY_PREFERENCES = "MyPref";
        private final static String ind = "192.168.33";

       

        Context context = this;
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modificaserver);
       
        Button butt1 = (Button)this.findViewById(R.id.ButtonInviaModServer);
        butt1.setOnClickListener(new OnClickListener() {
               
               
               
                public void onClick(View v) {
                       
                        // Otteniamo il riferimento alle Preferences
                            SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
                            // Otteniamo il corrispondente Editor
                            SharedPreferences.Editor editor = prefs.edit();
                            // Modifichiamo il valore con quello inserito nell'EditText
                            EditText editTextModIP = (EditText) findViewById(R.id.EditTextIndirIP);
                            CharSequence indirizzo = editTextModIP.getText();
                           
                           
                                    // Lo salviamo nelle Preferences
                            if (indirizzo != null) {
                                       editor.putString(ind, indirizzo.toString());
                                       editor.commit();
                                       Toast.makeText(ModificaServer.this,"IP salvato correttamente",Toast.LENGTH_LONG).show();
                                    }
                           
                           
                       Intent myIntent = new Intent(context, inizio.class);
                        startActivityForResult(myIntent, 0);
                       
                       
       
                   }                           
        });
       
       
        }
       
        public String getIP()
        {
                // Otteniamo il riferimento alle Preferences
                SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
                String indIP = prefs.getString(ind,"ValoreDiDefaultInCasoNonCiFosseNullaSalvato");
                return indIP;
               
        }
}


Codice: [Seleziona]
package michele.android;



class conn {
       
        ModificaServer ser = new ModificaServer();
       
public String conn = "jdbc:jtds:sqlserver://"+ser.getIP()+":1433/PizzaBase;instance=SQLEXPRESS;";
       
}

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Problema sharedpreferences AIUTO
« Risposta #8 il: 07 Marzo 2012, 14:17:00 CET »
0
Logcat?  :-)

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #9 il: 07 Marzo 2012, 14:35:49 CET »
0
Logcat?  :-)
Codice: [Seleziona]
03-07 14:10:59.919: W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
03-07 14:10:59.977: E/AndroidRuntime(279): FATAL EXCEPTION: main
03-07 14:10:59.977: E/AndroidRuntime(279): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{michele.android/michele.android.ModificaServer}: java.lang.NullPointerException
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 14:10:59.977: E/AndroidRuntime(279):         at android.os.Looper.loop(Looper.java:123)
03-07 14:33:50.647: W/dalvikvm(310): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
03-07 14:33:50.707: E/AndroidRuntime(310): FATAL EXCEPTION: main
03-07 14:33:50.707: E/AndroidRuntime(310): java.lang.RuntimeException: Unable to start activity ComponentInfo{michele.android/michele.android.sceltacibo}: java.lang.RuntimeException: Unable to start activity ComponentInfo{michele.android/michele.android.Aperitivi}: java.lang.NullPointerException
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.os.Looper.loop(Looper.java:123)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 14:33:50.707: E/AndroidRuntime(310):         at java.lang.reflect.Method.invokeNative(Native Method)
03-07 14:33:50.707: E/AndroidRuntime(310):         at java.lang.reflect.Method.invoke(Method.java:521)
03-07 14:33:50.707: E/AndroidRuntime(310):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 14:33:50.707: E/AndroidRuntime(310):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 14:33:50.707: E/AndroidRuntime(310):         at dalvik.system.NativeStart.main(Native Method)
03-07 14:33:50.707: E/AndroidRuntime(310): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{michele.android/michele.android.Aperitivi}: java.lang.NullPointerException
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.widget.TabHost.setCurrentTab(TabHost.java:323)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.widget.TabHost.addTab(TabHost.java:213)
03-07 14:33:50.707: E/AndroidRuntime(310):         at michele.android.sceltacibo.onCreate(sceltacibo.java:51)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-07 14:33:50.707: E/AndroidRuntime(310):         ... 11 more
03-07 14:33:50.707: E/AndroidRuntime(310): Caused by: java.lang.NullPointerException
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
03-07 14:33:50.707: E/AndroidRuntime(310):         at michele.android.ModificaServer.getIP(ModificaServer.java:67)
03-07 14:33:50.707: E/AndroidRuntime(310):         at michele.android.conn.<init>(conn.java:9)
03-07 14:33:50.707: E/AndroidRuntime(310):         at michele.android.Aperitivi.onCreate(Aperitivi.java:42)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 14:33:50.707: E/AndroidRuntime(310):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-07 14:33:50.707: E/AndroidRuntime(310):         ... 20 more

SCUSA MA NON SONO PRATICO ANCORA A LEGGERE IL LOGCAT!  :-(

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Problema sharedpreferences AIUTO
« Risposta #10 il: 07 Marzo 2012, 15:08:47 CET »
0
Allora è un pò complicato ma ho una teoria che potrebbe avere senso.

Di solito si ottiene una nullpointerexception sulle sharedprefs se queste sono chiamate nel costruttore.
Devi chiamarle nella oncreate. Sei sicuro che la classe aperitivi (o altra classe) non vada a istanziare la classe modificaserver nel proprio costruttore?

EDIT: l'idea che mi sono fatto è questa.
La tua classe conn chiama una new già nella definizione della variabile.
Invece di fare così ti crei un metodo init all'interno di conn che fa la stessa cosa cioè

Codice (Java): [Seleziona]
class conn {
       
        ModificaServer ser;
       
public String conn;

public void init(){
ser = new ModificaServer();
conn = "jdbc:jtds:sqlserver://"+ser.getIP()+":1433/PizzaBase;instance=SQLEXPRESS;";
}        
}

E poi nella oncreate della tua main activity dopo aver chiamato la super chiami esplicitamente l'init() della tua conn.
 ;-)
« Ultima modifica: 07 Marzo 2012, 18:30:11 CET da undead »

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #11 il: 07 Marzo 2012, 15:35:58 CET »
0
Non riesco a capire, ti posto il codice, a me "conn" cioè la stringa formattata come voglio io la devo usare dopo, ovvero la uso qua:

Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                // Impostiamo il Layout
                setContentView(R.layout.sceltacibo);
                // Otteniamo il riferimento alla ListView
                final ListView listView = (ListView) findViewById(R.id.lvNomi);
               
                conn connetti = new conn();
                String connessione=connetti.conn;
               
                Button butt = (Button)this.findViewById(R.id.ButtonInviaRiep);
        butt.setOnClickListener(new OnClickListener() {
               
                public void onClick(View v) {

                       Intent myIntent = new Intent(context, Riepilogo.class);
                        startActivityForResult(myIntent, 0);
       
                   }                           
        });
                       
                ArrayList<Persona> listaP = getPersone(connessione ,"sa","pa$$w0rd"); ....etc

Non capisco dove devo mettere:
Citazione
E poi nella oncreate della tua main activity dopo aver chiamato la super chiami esplicitamente l'init() della tua conn.


 :'( :'(

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Problema sharedpreferences AIUTO
« Risposta #12 il: 07 Marzo 2012, 16:33:47 CET »
0
Dopo

conn Connetti = new conn();

Chiami

Connetti.init();

 :-)

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Re:Problema sharedpreferences AIUTO
« Risposta #13 il: 07 Marzo 2012, 18:21:01 CET »
0
Niente, stesso errore, anche perchè mi dice che il metodo init deve avere un valore di ritorno, ho provato a dichirare l metodo init come string valore di ritorno e mi faccio ritornare la stringa formattata ma nulla, non capisco proprio cosa da fastidio.... :-\

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Problema sharedpreferences AIUTO
« Risposta #14 il: 07 Marzo 2012, 18:31:00 CET »
0
Mi ero dimenticato di una parentesi graffa ma se dichiari la init() come

public void init()

non deve aver alcun valore di ritorno. Forse hai copiaincollato l'errore che ho commesso?