2011-04-15 116 views
1
public static final String PREFS_NAME = "MyPrefsFile"; 
private SharedPreferences settings; 
settings = getSharedPreferences(PREFS_NAME, 0); 

越來越sharedPreferences時,當我在擴展應用程序,我得到第3行一個空指針,而當我做同樣的活動工作一類使用此代碼。爲什麼是這樣?空指針在應用類

我正在嘗試創建一個單例類來保存幾個變量。只有10個變量不足以使用sqllite左右。

編輯: 在我的第一個電話,我得到一個數據類的單一實例:

boolean active = DataClass.getInstance().getBoolean("active"); 

完整的數據類:

import android.app.Application; 
import android.content.SharedPreferences; 
import android.util.Log; 


public class DataClass extends Application { 
    public static final String PREFS_NAME = "MyPrefsFile"; 

    private static DataClass instance = null; 
    public static DataClass getInstance() { 
      if(instance == null) { 
      instance = new DataClass(); 
      } 
      return instance; 
     } 


    private SharedPreferences settings; 

    public DataClass() { 
     settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); //nullpointer here 
     Log.e("temp", "DataClass constructor executed"); 
    } 


    public void setBoolean(boolean trueorfalse, String id)  { 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean(id, trueorfalse); 
     editor.commit(); 
    } 

    public boolean getBoolean(String id)  { 
     return settings.getBoolean(id, false); 
    } 

} 

編輯:添加堆棧跟蹤:

04-15 09:28:25.064: ERROR/AndroidRuntime(16943): FATAL EXCEPTION: main 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943): java.lang.RuntimeException: Unable to start activity ComponentInfo{be.test.helloworld/be.test.helloworld.activities.MainActivity}: java.lang.NullPointerException 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.os.Looper.loop(Looper.java:143) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread.main(ActivityThread.java:4914) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at dalvik.system.NativeStart.main(Native Method) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943): Caused by: java.lang.NullPointerException 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at be.test.helloworld.data.DataClass.<init>(DataClass.java:23) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at be.test.helloworld.data.DataClass.getInstance(DataClass.java:14) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at be.test.helloworld.activities.MainActivity.onCreate(MainActivity.java:29) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745) 
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):  ... 11 more 

回答

9

稱這種現象您Application

+0

我已將密碼更改爲: \t public void onCreate(){ \t \t super.onCreate(); \t \t settings = getSharedPreferences(PREFS_NAME,MODE_PRIVATE); (「temp」,「DataClass構造函數執行」); \t \t \t } \t/*公共數據類()\t { \t \t設置= getSharedPreferences(PREFS_NAME,MODE_PRIVATE);// nullpointer here \t \t Log.e(「temp」,「DataClass constructor executed」); \t} */ 但getSharedPreferences方法和日誌不會執行 – Vincent 2011-04-15 07:47:03

+0

在'onCreate()'簽名上放置'@ Override'來查看Eclipse是否支付垃圾郵件。調試以查看它是否被調用。 – rajath 2011-04-15 07:50:35

+0

當我在beginpost中使用常規構造函數時,會調用它,但在獲取共享首選項時會給出空指針。當我使用帶有覆蓋符號的oncreate時,它不會被調用.. – Vincent 2011-04-15 07:58:55

0

做這個類延長Activity課!?

你可以嘗試在第3行使用MODE_PRIVATE而不是0

+0

onCreate()沒有這個問題,從延伸android.app.Application – Vincent 2011-04-15 07:28:14

+0

報價:「類,它擴展應用」 – 2011-04-15 07:28:48

+0

我不明白你爲什麼會延長'代替Application'類活動類。這就是我問這個問題的原因。根據我的經驗,'SharedPreferences'在'Activity' – 2011-04-15 07:54:13