Roromix Posté(e) 25 avril 2010 Share Posté(e) 25 avril 2010 Je me suis créé une classe pour gérer les préférences mais ça ne fonctionne pas, surement à cause de Activity package android.helloworld; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.widget.Toast; public class preferences extends Activity { public static final String PREFS_NAME = "account"; public SharedPreferences settings; SharedPreferences.Editor editor; Context context; public preferences(Context context) { this.context = context; settings = getSharedPreferences(PREFS_NAME, 0); } private void edit() { editor = settings.edit(); } private boolean save() { if(editor.commit()) { Toast.makeText(context, "Préfèrences enregistrées", Toast.LENGTH_SHORT).show(); return true; }else { return false; } } public long get_acc_id() { return settings.getLong("acc_id", 0); } public boolean set_acc_id(long id) { edit(); editor.putLong("acc_id", id); return save(); } } Dans mon main, quand je créé une instance de preferences ça plante private preferences prefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); prefs = new preferences(this); } Y-a-t-il une solution à mon problème ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 26 avril 2010 Share Posté(e) 26 avril 2010 Lorsque que tu postes ton code et dis qu'il y a une erreur, n'hésite pas à donner les logs de ton console d'erreurs. Ça permet de trouver plus facilement le problème ;) Si je me rappele bien, tu ne peux pas créer des instances d'Activity et donc c'est normal que ta classe Preferences ne fonctionne pas. Je ne comprends pas pourquoi tu souhaites que "preferences" hérite de "Activity". Pourquoi ne fais-tu pas une classe "preference" qiui hérite de "Object" et prend comme constructeur un objet "SharedPreferences"? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Roromix Posté(e) 26 avril 2010 Auteur Share Posté(e) 26 avril 2010 (modifié) Mon LogCat: 04-26 07:56:44.750: ERROR/AndroidRuntime(2923): ERROR: thread attach failed 04-26 07:56:45.050: ERROR/AndroidRuntime(2931): ERROR: thread attach failed 04-26 07:56:47.610: ERROR/ActivityManager(80): fail to set top app changed! 04-26 07:56:52.930: ERROR/AndroidRuntime(2940): ERROR: thread attach failed 04-26 07:56:53.270: ERROR/AndroidRuntime(2948): ERROR: thread attach failed 04-26 07:56:53.370: ERROR/AndroidRuntime(2954): Uncaught handler: thread main exiting due to uncaught exception 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.helloworld/android.helloworld.main}: java.lang.NullPointerException 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread.access$2200(ActivityThread.java:126) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.os.Handler.dispatchMessage(Handler.java:99) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.os.Looper.loop(Looper.java:123) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread.main(ActivityThread.java:4595) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at java.lang.reflect.Method.invokeNative(Native Method) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at java.lang.reflect.Method.invoke(Method.java:521) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at dalvik.system.NativeStart.main(Native Method) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): Caused by: java.lang.NullPointerException 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.helloworld.preferences.(preferences.java:16) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.helloworld.main.onCreate(portefeuille.java:26) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) 04-26 07:56:53.380: ERROR/AndroidRuntime(2954): ... 11 more Modifié 26 avril 2010 par Roromix Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 26 avril 2010 Share Posté(e) 26 avril 2010 pour récupérer les prefs j'utilise android.preferences.PreferenceManager.getDefaultSharedPreference(Context context) qui donctionne niquel. si tu veux une activity de preferences tu as aussi PreferenceActivity...; Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 26 avril 2010 Share Posté(e) 26 avril 2010 Ton NullPointerException est tout à fait normal puisque tu essaies de créer une instance d'Activity à la main (ce qui n'est pas possible). Il faut vraiment suivre les instructions que je t'ai donné précédemment ou bien faire ce que dit popolbx. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Roromix Posté(e) 26 avril 2010 Auteur Share Posté(e) 26 avril 2010 Je n'arrive pas à faire un objet "SharedPreferences" en constructeur. De quel manière faut-il faire cela ? J'ai fait en sorte que ma classe hérite d'"Object" mais je voit pas trop comment faire le constructeur. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 26 avril 2010 Share Posté(e) 26 avril 2010 public preferences(Context context, SharedPreferences prefs) { mContext = context; mSharedPreferences = prefs; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Roromix Posté(e) 26 avril 2010 Auteur Share Posté(e) 26 avril 2010 (modifié) public class preferences extends Object { public static final String PREFS_NAME = "account"; public SharedPreferences settings; SharedPreferences.Editor editor; Context context; public preferences(Context context, SharedPreferences prefs) { this.context = context; mSharedPreferences = prefs; settings = getSharedPreferences(PREFS_NAME, 0); } .... du coup quand je crée l'instance dans mon main prefs = new preferences(this, ??); Je met quoi comme valeur à la place de "??" ? Et dans ma classe préférences, qu'est-ce que je met dans mon constructeur pour appeler getSharedPreferences() qui est souligné en rouge depuis que j'ai supprimé l'héritage à "Activity" Je voudrais juste pouvoir lire et modifier une préférence depuis une activité X ou Y à partir d'une instance de ma classe "preferences" donnant accès aux préférences. Si quelqu'un réussi à le faire, qu'il me le fasse savoir. Merci par avance Modifié 26 avril 2010 par Roromix Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 26 avril 2010 Share Posté(e) 26 avril 2010 Tu ne dois pas avoir compris ce que je te disais :(. Il faut simplement garder le constructeur donné précédemment et lui passer en paramètre "getSharedPreferences(PREFS_NAME, 0)" en lieu et place de ?? Tu conserve cette référence avec un simple "settings = prefs"; Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Roromix Posté(e) 26 avril 2010 Auteur Share Posté(e) 26 avril 2010 ça fonctionne impeccable ! Merci Cyril Excuse-moi de te faire expliqué tout. Je ne suis pas encore très à l'aise avec Java et Android J'ai commencé il y a seulement 1 semaine. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.