我正在尝试创建一个简单的对话框,以允许我的用户创建一个新用户。我有我需要它的布局,但出于某种原因,当我单击Create按钮时会抛出异常。我已经尝试过各种方法来实现这一点,但我必须要留下一些东西。我现在正处于这个错误的第二天,我全都没有选择。我曾经两次重新编写代码并用精细的牙齿梳理过来。
这是我到目前为止所拥有的:
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 :(得分: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);
答案 1 :(得分: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按钮,因此将视图传递给onClick。没有理由再找到它。此外,它是一个按钮,而不是EditText;你确定这是你要测试的视图吗?
答案 2 :(得分:0)
你指的是错误的资源。
findViewById(R.id.usrTxt);
findViewById(R.id.pasTxt);
来自.xml文件的资源。
您应该参考对话框资源。
dialog.findViewById(R.id.usrTxt);
dialog.findViewById(R.id.pasTxt);