【问题标题】:NullPointerException using SharedPreferences使用 SharedPreferences 的 NullPointerException
【发布时间】:2011-04-04 02:25:06
【问题描述】:


我在这里的代码有问题。我在我的代码中使用 SharedPreferences,并且在代码的一行中收到 NullPointerException。完整代码如下:

    public class Exercise extends Activity {
String WEIGHT = "0";
String AGE = "0";
String FEET = "0";
String INCHES = "0";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.exercise);

    SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
    SharedPreferences.Editor prefsEditor = myPrefs.edit();
    prefsEditor.putInt(WEIGHT, 0);
    prefsEditor.putInt(AGE, 0);
    prefsEditor.putInt(FEET, 0);
    prefsEditor.putInt(INCHES, 0);
    prefsEditor.commit();


    final EditText weightField = (EditText) findViewById(R.id.EditTextWeight);
    try {
        prefsEditor.putInt(WEIGHT, Integer.parseInt(weightField.getText().toString()));
        prefsEditor.commit();
    } catch(NumberFormatException nfe) {
        System.out.println("Could not parse " + nfe);
    }   

NullPointerException 出现在这一行:

prefsEditor.putInt(WEIGHT, Integer.parseInt(weightField.getText().toString()));

谢谢!

编辑:这是调用 setContentView(R.layout.main) 的活动:

public class CalorieIntakeCalculator extends Activity {
/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

}

public void next(View view) {
    Intent intentExercise = new Intent(view.getContext(), Exercise.class);
    startActivityForResult(intentExercise, 0);
} 
}

当在 main.xml 中按下“下一步”按钮时,它会发送next,将活动从卡路里摄入计算器切换到锻炼。

【问题讨论】:

    标签: android nullpointerexception sharedpreferences


    【解决方案1】:

    由于您在该行上方多次成功使用了 prefsEditor,因此 weightField 似乎必须为空。你在调试器中检查过它的值吗?

    编辑:我还注意到您从未为 WEIGHT 分配值,也没有为 SharedPreferences 键分配任何其他字符串,因此它们都为空。你需要解决这个问题。

    String WEIGHT = "weight";
    String AGE = "age";
    String FEET = "feet";
    String INCHES = "inches";
    

    对于权重字段,请确保您的练习布局中有一个 ID 为 R.id.EditTextWeight 的 EditText

    【讨论】:

    • 非常感谢您的帮助!是的,当我检查调试器时,weightField 为空。不过,我仍然是一个学习初学者,不知道如何解决这两个问题。帮助将不胜感激,谢谢! :)
    • 再次感谢您!我解决了将值分配给字符串的第一个问题。但我无法解决另一个问题,因为 ID 为 R.id.EditTextWeight 的 EditText 在 main.xml 中。我已经发布了另一个调用 setContentView(R.layout.main) 的活动
    • 在练习类中,您调用 setContentView(R.layout.exercise)。然后,当你设置 weightField = (EditText)findViewById(R.id.EditTextWeight);它在executive.xml 布局文件(不是main.xml 布局文件)中查找ID 为EditTextWeight 的EditText。如果它不在该布局文件中,它将返回 null。
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多