【问题标题】:getSharedPreferences return nullpointerexception on fragment methodgetSharedPreferences 在片段方法上返回 nullpointerexception
【发布时间】:2014-10-22 02:45:53
【问题描述】:

我的 fragment1 上有一个 getSharedPreferences,它会从前一个 Fragment 加载 int。

public void backButtonWasPressed() {
    settings = getActivity().getSharedPreferences("MyPref", 0);
    .....
}

我调用 fragment1.backButtonWasPressed() 并在 "settings = getActivity().getSharedPreferences("MyPref", 0);" 上给我强制关闭和错误消息 nullpointerexception

我的日志猫:

08-28 16:52:21.828: E/AndroidRuntime(4412): FATAL EXCEPTION: main
08-28 16:52:21.828: E/AndroidRuntime(4412): java.lang.NullPointerException
08-28 16:52:21.828: E/AndroidRuntime(4412):     at pkh.apps.Fragment1.backButtonWasPressed(Fragment1.java:324)
08-28 16:52:21.828: E/AndroidRuntime(4412):     at pkh.apps.KajianUtama.onBackPressed(KajianUtama.java:71)
08-28 16:52:21.828: E/AndroidRuntime(4412):     at android.app.Activity.onKeyUp(Activity.java:2131)

Fragment1 上的第 324 行是:settings = getActivity().getSharedPreferences("MyPref", 0);

我的主要 SherlockFragmentActivity :

public class KajianUtama extends SherlockFragmentActivity implements OnItemClickListener {
....
@Override
public void onBackPressed() {
    super.onBackPressed();
    FragmentManager fm = getSupportFragmentManager();
    fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame);
    fragment1.backButtonWasPressed();
}
.....

}

我的片段1:

public class Fragment1 extends SherlockFragment{
....
   public void backButtonWasPressed() {
     settings = getActivity().getSharedPreferences("MyPref", 0);
     c = settings.getInt("numRun",0);
     Log.d("back pressed", "c " + c);
   }
...
}

请给我一个解决这个问题的方法。谢谢。

【问题讨论】:

  • 如果它加载一个字符串,那么为什么默认值为 0?应该是""null
  • 对不起,我的意思是 int,我已经编辑了我的问题
  • 你可以发布日志说明该行号并突出显示行号吗?
  • getActivity() 返回 null。
  • DIVA 和 Fouad Wahabi :请参阅上面的更新问题。谢谢。

标签: android android-fragments sharedpreferences


【解决方案1】:

检查您的 Preference 名称是否与您用于保存它的名称相同,最佳做法是保存一个常量 PREFERENCE_NAME="myPreferenceName",然后使用该常量而不是字符串。

编辑

这样试试

@Override
public void onBackPressed() {
  super.onBackPressed();
  FragmentManager fm = getSupportFragmentManager();
  fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame);
  fragment1.backButtonWasPressed(this);
}

然后

public void backButtonWasPressed(Context context) {
   settings = context.getSharedPreferences("MyPref", 0);
   c = settings.getInt("numRun",0);
   Log.d("back pressed", "c " + c);
}

将上下文传递给方法

【讨论】:

  • 我已经检查并交叉检查了名称,我确定它是正确的名称。
  • 那样会给我一个错误:“方法 getActivity() 未定义 KajianUtama 类型”。 KajianUtama 是 SherlockFragmentActivity,而不是 Fragment
  • 您的解决方案有效,我的 sharedPreferences 不再返回 null :D 谢谢。
  • 但是,在我的 Fragment1 上,我想在 onCreate 方法上使用一些变量来返回ButtonWasPressed(Context context) 方法,但它会返回 null。此外,在 onCreate 方法上声明了一些变量。如何在 backButtonWasPressed 上使用它?
  • 问题是你使用了方法,但是你没有实例化整个对象,如果你得到它的实例,我想你的问题会解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 2012-08-29
  • 2013-01-02
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多