2013-10-10 23 views
0

我想通過getSharePreferences加載一些數據。我已將保存和還原放在可從不同活動訪問的單獨類中。因爲我只用一個來測試。但每次運行應用程序時,它都會崩潰。SharedPreferences空指針異常


調用代碼:

protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

      LoadValues(); 

    } 
    public void LoadValues(){ 
     cs_settings settings = new cs_settings(); 
     settings.setContext(this) 
     TargetEnd.setText(String.valueOf(settings.getTargetEnd())); 
      TargetBeg.setText(String.valueOf(settings.getTargetBegining())); 

    } 

cs_settings:

public class cs_settings { 

    private float TargetBegining, TargetEnd; 

    public static final String PREFS_NAME = "settingsFile"; 
    private Context context; 

    public void setContext(Context context) { 
     this.context = context; 
    } 

    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = settings.edit(); 



    public float getTargetBegining() { 
     TargetBegining = settings.getFloat("targetbeg", 0f); 
     return TargetBegining; 
    } 

    public void setTargetBegining(float targetBegining) { 
     TargetBegining = targetBegining; 
     editor.putFloat("targetbeg", TargetBegining); 
     editor.commit(); 
    } 

    public float getTargetEnd() { 
     TargetEnd = settings.getFloat("targetEnd", 0f); 
     return TargetEnd; 
    } 

    public void setTargetEnd(float targetEnd) { 
     TargetEnd = targetEnd; 
     editor.putFloat("targetEnd", TargetEnd); 
     editor.commit(); 
    } 

} 

的錯誤:

10-10 22:53:54.806  223-223/? E/installd﹕ ECS_ECS: * do_linklib pkg [net.malcomber.insulincorrect] 
10-10 22:53:54.806  223-223/? E/installd﹕ ECS_ECS: * do_dexopt pkg [/data/app/net.malcomber.insulincorrect-2.apk] 
10-10 22:53:55.356  223-223/? E/installd﹕ ECS_ECS: * do_move_dex pkg [/data/app/net.malcomber.insulincorrect-2.apk] 
10-10 22:53:58.069 8212-8212/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{net.malcomber.insulincorrect/net.malcomber.insulincorrect.MainActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2247) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297) 
      at android.app.ActivityThread.access$700(ActivityThread.java:152) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5328) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at net.malcomber.insulincorrect.cs_settings.<init>(cs_settings.java:20) 
      at net.malcomber.insulincorrect.MainActivity.LoadValues(MainActivity.java:110) 
      at net.malcomber.insulincorrect.MainActivity.onCreate(MainActivity.java:76) 
      at android.app.Activity.performCreate(Activity.java:5250) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297) 
            at android.app.ActivityThread.access$700(ActivityThread.java:152) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5328) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
            at dalvik.system.NativeStart.main(Native Method) 

回答

1

看看你的類的屬性:

private Context context; 
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = settings.edit(); 

settings給定的值,contextnull。所以你得到一個NullPointerException。

你可能想創建一個構造函數:

private Context context; 
SharedPreferences settings; 
SharedPreferences.Editor editor; 

public cs_settings(Context context) { 
    this.context = context; 
    settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    editor = settings.edit(); 
} 
+0

謝謝你,也許我應該有咖啡和發佈一些愚蠢的前醒來第一。非常感謝。 – Malcor