2011-02-28 18 views
0

我想创建一个简单的对话框,以允许我的用户创建一个新的用户。我有布局的方式,我需要它,但由于某种原因,当我点击创建按钮,它会引发异常。我已经尝试过各种方法来完成这个任务,但我必须留下一些东西。我现在在这个错误的第二天,我都没有选择。我曾经重新编写过两次代码,然后用细齿梳子去完成。与edittext()的Android对话框保持回来null抛出异常

这里是我到目前为止有:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final HttpClient httpclient = new DefaultHttpClient(); 

    //new user button, work in progress 
    Button newuser = (Button) findViewById(R.id.new_user); 
    newuser.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      final Dialog createU = new Dialog(MainActivity.this); 



      createU.setContentView(R.layout.newuser); 
      createU.setTitle("Create User"); 

      Button create = (Button) createU.findViewById(R.id.createUsr); 
      Button cancel = (Button) createU.findViewById(R.id.cancel); 



      create.setOnClickListener(new View.OnClickListener() {//creates the user 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        String usr = null, pass = null; 
        EditText userU = (EditText) findViewById(R.id.createUsr); 
        EditText passU = (EditText) findViewById(R.id.cancel); 

        if(userU.getText()!= null){//throws ERROR/AndroidRuntime(9937): java.lang.NullPointerException 

         usr = userU.getText().toString(); 
        } 
        if(passU.getText()!=null){ 
         pass = passU.getText().toString(); 
        } 


        Toast toast = Toast.makeText(getApplicationContext(), "User: " + usr + ", Pass: " + pass, Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
      }); 
      cancel.setOnClickListener(new View.OnClickListener() {//closes dialog 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        createU.hide(); 
       } 
      }); 
      createU.show(); 
     } 
    }); 
    } 
} 
<?xml version="1.0" encoding="utf-8"?> 

<EditText android:id="@+id/usrTxt" android:layout_height="wrap_content" 
    android:layout_width="match_parent" android:maxLines="1" android:hint="Username" 
    android:text="2"></EditText> 
<EditText android:id="@+id/pasTxt" android:layout_height="wrap_content" 
    android:layout_width="match_parent" android:layout_below="@id/usrTxt" 
    android:inputType="textPassword" android:maxLines="1" android:hint="Password" 
    android:text="2"></EditText> 
<Button android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" android:layout_width="wrap_content" 
    android:layout_below="@+id/pasTxt" android:text="Create" android:id="@+id/createUsr"></Button> 
<Button android:layout_height="wrap_content" 
    android:layout_width="wrap_content" android:id="@+id/cancel" 
    android:layout_alignParentRight="true" android:text="Cencel" 
    android:layout_below="@+id/pasTxt"></Button> 

+0

你还可以发布新用户布局的XML吗?另外,它抛出什么异常,以及从哪一行? – 2011-02-28 04:47:35

+0

你可以显示完整的错误跟踪 – 2011-02-28 05:02:08

+0

我已经缩小到当我调用.gettext(),每一种方式我把它只是抛出一个错误/ AndroidRuntime(9937):java.lang.NullPointerException 让我知道如果你需要别的东西。 – 2011-02-28 05:51:06

回答

1

不要初始化空字符串值

避免String usr = null, pass = null;。希望这会有所帮助。

更新:

更改上面的行引起误差作为

if (!userU.getText().toString().equals("")) { 

UPDATE2

更改EDITTEXT初始化线如下

EditText userU = (EditText) findViewById(R.id.usrTxt);      
    EditText passU = (EditText) findViewById(R.id.pasTxt); 
+0

我会记下这一点,我相信我只是在创建该行时进行测试。 – 2011-02-28 05:52:29

+0

检查编辑的答案.. – 2011-02-28 06:05:18

+0

试过。这是我的第一行代码。每次我调用.gettext()或任何它抛出空。查看我编辑的代码。 – 2011-02-28 06:12:31

0

这个问题,我认为,是这些行onClick(View v)

EditText userU = (EditText) findViewById(R.id.createUsr); 
EditText passU = (EditText) findViewById(R.id.cancel); 

正在搜索你的主要布局的观点,它是没有找到他们。尝试更改它们:

EditText userU = (EditText) createU.findViewById(R.id.createUsr); 
EditText passU = (EditText) createU.findViewById(R.id.cancel); 

和NullPointerException应该消失。

但是这段代码有点奇怪。 onClickListener已经连接到R.id.createUsr按钮,所以这就是View作为onClick传递的内容。没有理由再找到它。此外,它是一个按钮,而不是EditText;你确定这是你想要测试的视图吗?

+0

谢谢你清理那个,但我想我不会跟着你在整个按钮的事情。 也作为Tusher指出我引用编辑文本的错误ID。如果你可以再次解释按钮的事情。我确实设法让它工作。 – 2011-02-28 11:58:44

0

您指的是错误的资源。

findViewById(R.id.usrTxt);    
findViewById(R.id.pasTxt); 

来自.xml文件的资源。

您应该参考对话资源。

dialog.findViewById(R.id.usrTxt);    
dialog.findViewById(R.id.pasTxt);