用共享流程中的现有数据填充EDITTEXT
-
12-10-2019 - |
题
我敢肯定,这是我正在忽略的真正基本的东西,但是与我研究的所有文章相比,我似乎做对了。
我有一个DialogPreference,它具有用于用户名和密码的可持续下文,以及一个按钮,可以将数据保存为首选项。创建后,我想查询首选项,并用先前保存的数据填充EditText框,否则将框空白。当前,如果没有以前的数据,我没有问题,但是如果数据确实存在,我的应用程序试图打开DialogPreference时会崩溃。
我的DialogPreference代码:
public class AccDialog extends DialogPreference implements DialogInterface.OnClickListener {
private EditText mUserbox, mPassbox;
CharSequence mPassboxdata, mUserboxdata;
private Context mContext;
private int mWhichButtonClicked;
public AccDialog(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
@Override
protected View onCreateDialogView() {
// Access default SharedPreferences
@SuppressWarnings("unused")
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);
// Register listener
final OnCheckedChangeListener mShowchar_listener;
// Run the following methods onCreate
existingData();
@SuppressWarnings("unused")
LinearLayout.LayoutParams params;
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(10, 10, 10, 10);
layout.setBackgroundColor(0xFF000000);
mUserbox = new EditText(mContext);
mUserbox.setSingleLine(true);
mUserbox.setSelectAllOnFocus(true);
mPassbox = new EditText(mContext);
mPassbox.setSingleLine(true);
mPassbox.setSelectAllOnFocus(true);
layout.addView(mUserbox);
layout.addView(mPassbox);
return layout;
}
private void existingData() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);
String Unamedata = pref.getString("usernamekey", "");
String Pworddata = pref.getString("passwordkey", "");
if((Unamedata.length() != 0) && (Pworddata.length() != 0)) {
mUserbox.setText(Unamedata);
mPassbox.setText(Pworddata);
}
}
}
解决方案
这是因为你得到了 NullPointerException
. 。你在打电话 existingData()
在创建Edittexs之前。它应该以这种方式工作:
// initialize them first!!!!
mUserbox = new EditText(mContext);
mPassbox = new EditText(mContext);
// Run the following methods onCreate
existingData();
@SuppressWarnings("unused")
LinearLayout.LayoutParams params;
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(10, 10, 10, 10);
layout.setBackgroundColor(0xFF000000);
mUserbox.setSingleLine(true);
mUserbox.setSelectAllOnFocus(true);
mPassbox.setSingleLine(true);
mPassbox.setSelectAllOnFocus(true);
layout.addView(mUserbox);
layout.addView(mPassbox);
只是最后一个建议:了解如何使用LogCat工具。它将向您展示为什么应用程序崩溃的时间,何时何地。
不隶属于 StackOverflow