0

I am trying to load up some data through getSharePreferences. I have put the save and the restore in a separate class that can be accessed from different Activities. As the moment I am only using one to test with. But every time I run the application it crashes.


Calling code:

    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();
    }

}

The Error:

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 Answer 1

1

Look at your class’s attributes:

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

When settings is given a value, context is null. So you get a NullPointerException.

You probably want to create a constructor:

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();
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, maybe I should have coffee and wake up first before posting something silly. Many thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.