ListView抛出NULL指针异常

时间:2011-11-01 18:59:52

标签: android android-listview nullpointerexception

阅读很多关于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)   ...

1 个答案:

答案 0 :(得分:1)

Woooops!所以..我改变了行

ListView listview = (ListView) findViewById(R.id.kernenlist);

this.listView = (ListView) findViewById(R.id.kernenlist);

..现在它有效! :)

很明显,通过使用第一行,我声明了一个新的局部变量,将公共变量保留为NULL?不确定,也许你可以对此发表评论吗?