2 myq 26 myq_26 于 2012.11.27 14:12 提问

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"/>

3个回答

Baby_Bonnie
Baby_Bonnie   2012.11.27 15:38
已采纳

如果用户名和密码是对话框中的,你应该使用以下代码:

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();
cytown
cytown   2012.11.29 15:20
//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(); 
myq_26
myq_26 非常感谢你的回答,很细致。我用Baby_bonnie的方法很好的实现了,希望能给其它用户很好的参考!
5 年多之前 回复
hxn_217
hxn_217   2012.11.27 17:27

我使用以下的对话框后能很好的实现。

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();
myq_26
myq_26 谢谢你的回答!
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!