我在viewpager中有多个片段,每个片段几乎有十个editext,所以我想将所有值保存在共享首选项中。当用户滑动片段1时,fragment1的数据将保存在共享首选项中,并且对于所有片段都是相同的。
public void user(String EditText1, String EditText2){
// Storing data in pref
editor.putString(value1, EditText1);
editor.putString(value2, EditText2);
// commit changes
editor.commit();
}
以下是获取edittext值以保存在共享首选项中的代码 -
pager.setOffscreenPageLimit(9);
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
Fragment1 f1 = new Fragment1();
EditText1= f1.txtEditText1.getText().toString();
EditText2= f1.txtEditText2.getText().toString();
session.user(EditText1, EditText1);
}
});
当我在第一个片段上填写所有编辑文本时,当我滑动时,我收到以下错误 -
java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor `android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object reference`
答案 0 :(得分:0)
变量editor
在User类的构造函数中为null。这就是你崩溃的原因。
同样onPageScrollStateChanged
- 是做这样的事情的坏地方,因为在一次片段翻转期间会多次调用它。最好使用onPageScrolled
。
同样没有意义创建片段以保存某些内容,您需要使用对用户可见的片段实例。 Check如何按位置分段。