访问ListView活动时的NPE

时间:2013-08-19 05:45:38

标签: android android-listview

堆栈跟踪:

java.lang.NullPointerException
at android.widget.ListView.removeFooterView(ListView.java:432)
at com.app.mobileapp.MainActivity$getValues.onPostExecute(MainActivity.java:666)

第666行:

listView.removeFooterView(footerView);

但绝对可以很好地创建 ListView FooterView 。因为我可以在第666行之前将页脚设置为列表视图:

listView.addFooterView(footerView);

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);

if (result.equals("empty")) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.setAdapter(mAdapter);
} else if (result.equals("success")) {
    listView.removeFooterView(footerView);
    listView.setAdapter(mAdapter);
}

“空”的情况也可以。页脚视图显示“无值”。但是“成功”案件崩溃了。

  

这适用于 Android 4.0 + ,但在 2.3.6 时崩溃。

3 个答案:

答案 0 :(得分:0)

问题是,如果成功,您在尝试删除页脚视图,然后将其添加到列表视图中。这就是你获得NPE的原因。

 listView.addFooterView(footerView);

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);

if (result.equals("empty")) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.setAdapter(mAdapter);
} else if (result.equals("success")) {

    listView.setAdapter(mAdapter);
    listView.removeFooterView(footerView);
}

试用此代码:祝你好运

答案 1 :(得分:0)

它不是一个如何删除页脚视图的答案,但我有两个可能的解决方案:

1.为这个具体案例提供一个提示:不要立即添加和删除,为什么不检查是否需要添加,然后才添加?例如:

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);
if ("empty".equals(result)) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.addFooterView(footerView);
    listView.setAdapter(mAdapter);
} else if ("success".equals(result))
    listView.setAdapter(mAdapter);

2.如果代码不适用于旧版本的android,你可以将页脚视图作为footerView真实内容的容器(例如FrameLayout),并让它永远保留。如果它需要填充内容,请填写,如果不是,请不要。

答案 2 :(得分:0)

发件人:

Crash on ListView.removeFooterView(View)

2.3.6上的Android版公共boolean removeFooterView(View v)的问题,它不会检查适配器是否已经设置为ListView。

所以,我所要做的就是检查:

listView.getAdapter() != null;

删除 footerView

之前