问题描述
- Android - 无法从EditText Control读取文本
- 程序中有一个AlertDialog对话框,使用了一个自定义布局。在OnClick事件中我想读出用户输入的信息。使用了以下的代码:
//Login Dialog AlertDialog.Builder builder = new AlertDialog.Builder(this); // Get the layout inflater LayoutInflater inflater = this.getLayoutInflater(); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout builder.setView(inflater.inflate(R.layout.dialog_signin null)) .setPositiveButton(R.string.tvLoginTitle new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog int id) { String username = ((EditText)findViewById(R.id.loginUsername)).getText().toString(); String password = ((EditText)findViewById(R.id.loginPassword)).getText().toString(); System.out.println(username); System.out.println(password); ConnectionID.loginToServer(cMainActivity username password); } }) .setNegativeButton(R.string.btnExit new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog int id) { System.exit(0); } }).show();
但是当我想要读出信息的时候,获得一个来自dialog_signin的布局中NullPointerException异常。
<EditText android:id=""@+id/loginUsername"" android:inputType=""textEmailAddress"" android:layout_width=""match_parent"" android:layout_height=""wrap_content"" android:layout_marginTop=""16dp"" android:layout_marginLeft=""4dp"" android:layout_marginRight=""4dp"" android:layout_marginBottom=""4dp"" android:hint=""@string/tvUsername"" /><EditText android:id=""@+id/loginPassword"" android:inputType=""textPassword"" android:layout_width=""match_parent"" android:layout_height=""wrap_content"" android:layout_marginTop=""4dp"" android:layout_marginLeft=""4dp"" android:layout_marginRight=""4dp"" android:layout_marginBottom=""16dp"" android:fontFamily=""sans-serif"" android:hint=""@string/tvPassword""/>
解决方案
如果用户名和密码是对话框中的,你应该使用以下代码:
View v = inflater.inflate(R.layout.dialog_signin null); builder.setView(v);String username = ((EditText)v.findViewById(R.id.loginUsername)).getText().toString();String password = ((EditText)v.findViewById(R.id.loginPassword)).getText().toString();
解决方案二:
//Login Dialog AlertDialog.Builder builder = new AlertDialog.Builder(this); // Get the layout inflater LayoutInflater inflater = this.getLayoutInflater(); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout View view = inflater.inflate(R.layout.dialog_signin null); final EditText txtuser = (EditText)findViewById(R.id.loginUsername); final EditText txtpass = (EditText)findViewById(R.id.loginPassword); builder.setView(view) .setPositiveButton(R.string.tvLoginTitle new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog int id) { String username = txtuser.getText().toString(); String password = txtpass.getText().toString(); System.out.println(username); System.out.println(password); ConnectionID.loginToServer(cMainActivity username password); } }) .setNegativeButton(R.string.btnExit new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog int id) { // System.exit(0); // don't do this in Android } }).show();
解决方案三:
我使用以下的对话框后能很好的实现。
Dialog builder = new Dialog(this);builder.setContentView(R.layout.dialog_signin);String username = ((EditText)builder.findViewById(R.id.loginUsername)).getText().toString();String password = ((EditText)builder.findViewById(R.id.loginPassword)).getText().toString();//你的按钮builder.show();
时间: 2024-08-03 08:53:04