【问题标题】:Android: NullPointerException Working With SharedPreferencesAndroid:使用 SharedPreferences 时出现 NullPointerException
【发布时间】:2012-09-28 21:28:09
【问题描述】:

使用 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.<init>(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

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案1】:

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

    移动这一行:

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

    在 onCreate() 中

    【讨论】:

    • 你先生.. 值得奖励;接受的答案听起来如何? :)(当然需要 6 分钟)
    【解决方案2】:

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

    你现在的做法是设置为 null;

    【讨论】:

      【解决方案3】:
      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 ...
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 2012-09-06
        相关资源
        最近更新 更多