所以,我已经研究了很多,试图为Hello World游戏应用程序实现一个简单的PIN身份验证系统。不幸的是,我认为有些事情仍然在我脑海中。
正如我的代码当前所示,它显示对话框并且不允许取消它。但是,EditText字段不再出现,这违背了要求PIN的目的。我认为布局目的需要一个链接的XML文件,但Android Studio似乎不接受对这样一个文件的调用(即pinauth.setView(findViewById(R.layout.dialog_pin));
,我认为无论如何我都不认为这是正确的结构
非常感谢您提供的任何帮助。整个方法的代码发布在下面。
public void auth(View v)
{
// The logout method works fine, since no PIN is necessary.
if(users.getBoolean("activeLogin", false) == true) successLogout();
else
{
// Get selected user and pull SharedPreferences to get stored PIN.
final String activeUser = userList.getSelectedItem().toString();
scores = getSharedPreferences(activeUser, 0);
// If a PIN is found on file, launch AlertDialog to prompt for PIN. No XML file is linked to the AlertDialog at this time.
if(scores.getInt("pin", 123456789) != 123456789)
{
AlertDialog.Builder pinAuth = new AlertDialog.Builder(this);
pinAuth.setTitle("PIN required.");
pinAuth.setMessage("Please enter your pin.");
pinAuth.setCancelable(false);
pinAuth.setView(findViewById(R.layout.dialog_pin))
final EditText pin = new EditText(this);
pin.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);
// These checks seem to work ok.
pinAuth.setPositiveButton("Login", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(pin.getText().toString().isEmpty())
{
makeToast("Sorry, no pin was entered.", Toast.LENGTH_SHORT);
return;
}
else if(Integer.valueOf(pin.getText().toString()) != scores.getInt("pin", 123456789))
{
makeToast("Sorry, that pin was incorrect. Try again.", Toast.LENGTH_SHORT);
return;
}
else
successLogin(activeUser);
}
});
// Show the AlertDialog.
pinAuth.show();
}
// if the account has no PIN
else successLogin(activeUser);
}
}
作为旁注,PIN最多只能包含8个数字字符,因此123456789
首先要创建一个不可能的PIN,因此检查引脚的条件语句不是等于所述数字不应干扰操作。
答案 0 :(得分:1)
首先需要inflate
自定义布局。
AlertDialog.Builder pinAuth = new AlertDialog.Builder(this);
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_pin, null);
pinAuth.setTitle("PIN required.");
pinAuth.setCancelable(false);
pinAuth.setView(view);
final EditText pin = (EditText) view.findViewById(R.id.whateverThisEditTextIdIs);
pin.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);
请注意,我还更改了您引用/创建EditText
对象的方式。我还使用了pinAuth.setMessage()
,因为您的自定义布局可能会显示该消息。