程序中有一个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();
我使用以下的对话框后能很好的实现。
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();
//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();