Android:NullPointerException使用SharedPreferences

使用SharedPreferences,此活动在启动时崩溃。 首先,我将发布活动代码,然后我将发布我的LogCat。 非常感谢你们,你们总是这么大的帮助! 🙂

活动代码;

package com.creativecoders.gymbuddy; import com.creativecoders.gymbuddy.R; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; public class Benchmark extends Activity { public static final String GB_PREFERENCES_BENCH = "Bench"; public static final String GB_PREFERENCES_FLIES = "Flies"; SharedPreferences settings = getSharedPreferences("gBValues", Context.MODE_PRIVATE); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_benchmark); } public void onStart() { super.onStart(); findViewById(R.id.button5).setOnClickListener(new handleButton5()); } class handleButton5 implements OnClickListener { public void onClick(View v) { EditText editText1 = (EditText)findViewById(R.id.editText1); String sWeight = editText1.getText().toString(); final double dWeight = Double.parseDouble(sWeight); EditText editText2 = (EditText)findViewById(R.id.editText2); String sPush = editText2.getText().toString(); final double dPush = Double.parseDouble(sPush); EditText editText3 = (EditText)findViewById(R.id.editText3); String sSit = editText3.getText().toString(); final double dSit = Double.parseDouble(sSit); EditText editText4 = (EditText)findViewById(R.id.editText4); String sPull = editText4.getText().toString(); final double dPull = Double.parseDouble(sPull); double dBench = (((Math.floor(dWeight*.0664))*10)-10)+dPush; double dFlies = (Math.floor(((Math.floor(dBench*.6)/10)*10))); int iBench = (int)dBench; int iFlies = (int)dFlies; String sBench = "" + iBench; String sFlies = "" + iFlies; SharedPreferences.Editor editor1 = settings.edit(); editor1.putString(GB_PREFERENCES_BENCH, sBench); editor1.commit(); SharedPreferences.Editor editor2 = settings.edit(); editor2.putString(GB_PREFERENCES_FLIES, sFlies); editor2.commit(); TextView TextView1 = (TextView)findViewById(R.id.textView1); TextView1.setText(String.valueOf("Bench Press "+ iBench +" lbs")); TextView TextView2 = (TextView)findViewById(R.id.textView2); TextView2.setText(String.valueOf("Bar Curls "+ iCurls +" lbs")); } } } 

这是我的LogCat;

 09-28 21:18:52.636: E/AndroidRuntime(686): FATAL EXCEPTION: main 09-28 21:18:52.636: E/AndroidRuntime(686): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.creativecoders.gymbuddy/com.creativecoders.gymbuddy.Benchmark}: java.lang.NullPointerException 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1879) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.access$600(ActivityThread.java:122) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.os.Handler.dispatchMessage(Handler.java:99) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.os.Looper.loop(Looper.java:137) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.main(ActivityThread.java:4340) 09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.reflect.Method.invokeNative(Native Method) 09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.reflect.Method.invoke(Method.java:511) 09-28 21:18:52.636: E/AndroidRuntime(686): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 09-28 21:18:52.636: E/AndroidRuntime(686): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 09-28 21:18:52.636: E/AndroidRuntime(686): at dalvik.system.NativeStart.main(Native Method) 09-28 21:18:52.636: E/AndroidRuntime(686): Caused by: java.lang.NullPointerException 09-28 21:18:52.636: E/AndroidRuntime(686): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:153) 09-28 21:18:52.636: E/AndroidRuntime(686): at com.creativecoders.gymbuddy.Benchmark.(Benchmark.java:35) 09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.Class.newInstanceImpl(Native Method) 09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.Class.newInstance(Class.java:1319) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1870) 09-28 21:18:52.636: E/AndroidRuntime(686): ... 11 more 

您必须在调用onCreate后访问共享首选项。 否则上下文将为null :)这就是为什么你得到一个空指针exception

移动这一行:

 SharedPreferences settings = getSharedPreferences("gBValues", Context.MODE_PRIVATE); 

在onCreate()

将设置实例变量的实例化移动到onCreate方法中。 在super.onCreate调用之后。

你现在的方式,它被设置为null;

 public class MainActivity extends Activity{ SharedPreferences sharedpreferences; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sharedpreferences = getSharedPreferences("preferences", Context.MODE_PRIVATE); editor.putBoolean("sharedpreferences", true); editor.commit(); // your code ... } // your code ... }