阅读很多关于NPE的问题......仍然在黑暗中。
我声明了一个listview:
public class SelecteerKernen extends Activity {
protected WoordData kerndata;
public ListView listView = null;
稍后,我用SQLite dBase中的数据填充它。这很有效。
// Fill Listview with the kern-names
ListView listView = (ListView) findViewById(R.id.kernenlist);
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, al));
但是,当我想计算项目时,要将选中的项目保存到首选项,我会在此代码的int count = ...行上获得一个NPE。
编辑我解决了计数..行,现在if(this.listView)...行抛出NPE ..唉! :
private String getSavedItems() {
String savedItems = "";
int count = this.listView.getAdapter().getCount();
for (int i = 0; i < count; i++) {
//edit now THIS line trows the NPE :
if (this.listView.isItemChecked(i)) {
if (savedItems.length() > 0) {
savedItems += "," + this.listView.getItemAtPosition(i);
} else {
savedItems += this.listView.getItemAtPosition(i);
}
}
}
return savedItems;
感谢您的帮助!!
PS。我注意到用户被要求使用LogCats。怎么能帮助找到错误?这是我的:
11-01 19:42:35.680:W / dalvikvm(28146):threadid = 1:线程退出时未捕获异常(组= 0x40015560) 11-01 19:42:35.700:E / AndroidRuntime(28146):致命异常:主要 11-01 19:42:35.700:E / AndroidRuntime(28146):java.lang.NullPointerException 11-01 19:42:35.700:E / AndroidRuntime(28146):at happyworx.nl.Flitswoorden.SelecteerKernen.getSavedItems(SelecteerKernen.java:163) 11-01 19:42:35.700:E / AndroidRuntime(28146):at happyworx.nl.Flitswoorden.SelecteerKernen.SavePreferences(SelecteerKernen.java:121) 11-01 19:42:35.700:E / AndroidRuntime(28146):at happyworx.nl.Flitswoorden.SelecteerKernen.access $ 0(SelecteerKernen.java:115) 11-01 19:42:35.700:E / AndroidRuntime(28146):at happyworx.nl.Flitswoorden.SelecteerKernen $ 1.onClick(SelecteerKernen.java:72) ...
答案 0 :(得分:1)
Woooops!所以..我改变了行
ListView listview = (ListView) findViewById(R.id.kernenlist);
到
this.listView = (ListView) findViewById(R.id.kernenlist);
..现在它有效! :)
很明显,通过使用第一行,我声明了一个新的局部变量,将公共变量保留为NULL?不确定,也许你可以对此发表评论吗?