我有一个按钮,其中包含一个在点击时调用的方法。
方法:
public void addToList(View view) {
System.out.println(1);
String str = "";
try{
str = edit.getText().toString();}
catch (Exception ex){
System.out.println( ex );
}
System.out.println(2);
new QueryInList( ).execute(helper, str);
System.out.println(3);
edit.setText(null);
System.out.println(4);
//adapter.notifyDataSetChanged();
}
好吧,我总是得到异常,这是一个Nullpointerexception。
这让我非常困惑,因为编辑是初学者:
在课堂上声明:
private EditText edit;
此外,它在onCreate中初始化:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
edit = (EditText)findViewById(R.id.textfield);
setContentView(R.layout.activity_view);
......}
所以我想知道为什么我总是得到一个Nullpointer?
答案 0 :(得分:2)
在查找项目之前设置内容视图。在设置内容视图之前,您无法查找项目。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
edit = (EditText)findViewById(R.id.textfield);
......}
答案 1 :(得分:1)
在edit = (EditText)findViewById(R.id.textfield);
声明之后移动setContentView
。
以下是来自另一个question的用户@Squonk的一个很好的解释:
setContentView(...)
表示“布局通胀”。这意味着它解析相关文件中的XML(在您的情况下为 main.xml )并创建其中所有UI元素的实例。然后它将该视图附加到Activity。当您致电findViewById(...)
时,它不会直接引用您的 main.xml - 而是引用附加到Activity的内容视图,换言之,setContentView(...)
< / p>