【问题标题】:NullPointerException on onListItemClickonListItemClick 上的 NullPointerException
【发布时间】:2011-11-28 22:16:06
【问题描述】:

我在我的 ListActivity 中随机收到一个空指针异常(我无法始终如一地重现该错误)。 StackTrace 在第一行显示错误,super.onListItemClick()。不知道为什么这会返回 null?

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        for (int i = 0; i < infos.size(); i++)
            if (i != position)
                l.getChildAt(i).setBackgroundColor(0xFF444444);
        v.setBackgroundColor(0xFF666666);
        // v.setClickable(true);
        // test.setColorFilter(Color.parseColor("#444444"),
        // PorterDuff.Mode.DARKEN);
        ApplicationInfo ai = null;
        ai = infos.get(position);
        rinfos = findActivitiesForPackage(this, ai.packageName);
        ResolveInfo ri = rinfos.get(0);
        app_package_and_name = new String[] { ri.activityInfo.packageName, ri.activityInfo.name };
    }

这是堆栈跟踪:

java.lang.NullPointerException
at com.sonrlabs.test.sonr.SONR.onListItemClick(SONR.java:189)
at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3763)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1936)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您没有完整的堆栈跟踪可在此处发布?
  • 因为 l 或 v 为空。请完整的堆栈跟踪。
  • 添加异常的堆栈跟踪

标签: java android nullpointerexception listactivity android-activity


【解决方案1】:

删除super.onListItemClick(l, v, position, id);这一行

【讨论】:

  • 已删除。不幸的是,崩溃仍然发生
  • 删除后stacktrace是否一样?
  • 错误发生在 l.getChildAt(i).setBackgroundColor(0xFF444444);不知道为什么会越界?
  • 如果你确定这是错误发生的地方,我会事先用一个大的 LOG 输出为“i”设置一个保护 - 所以下次发生它时你先抓住它
  • 没有越界。删除前后都有一个空指针,所以它必须是“l”而不是“i”。所以我想我们必须看看整个活动。此代码适用于ListActivity。如果您有ListView 但没有ListActivity,则监听器不正确。您必须使用另一个侦听器,例如 this listener。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多