【问题标题】:Nullpointer exception warning when setting adapter to a listView将适配器设置为 listView 时出现 Nullpointer 异常警告
【发布时间】:2016-11-14 03:15:43
【问题描述】:

我的代码如下:

public class EventActivity extends AppCompatActivity {
        ListView listView;
        ItemAdapter adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.attaction_list);

            ArrayList<Item> items = new ArrayList<>();
            items.add(new Item("a", "a", a));
            items.add(new Item("b", "b", b));
            items.add(new Item("c", "c", c));

            adapter = new ItemAdapter(this, items, R.color.event);
            listView = (ListView) findViewById(R.id.list);
            if(adapter != null) {
                listView.setAdapter(adapter);
            }
        }
    }

Andoid Studio 编辑器指出listView.setAdapter(adapter) 可能会导致空指针异常。谁能解释该警告的来源以及如何解决?

【问题讨论】:

  • ItemAdapter 类是我自定义的适配器类,它扩展了 ArrayAdapter。
  • 你能显示 ItemAdapter 和 XML 布局 attaction_list 吗?
  • @MikeM。但该问题中没有人真正提供可能的解决方案。
  • 是的,他们做到了。无论如何,这只是一个警告。确保View 在布局中,然后忽略它。或者到处放置不必要的空检查。如果您的View 不在布局中,那么它应该 失败并出现异常。你无法改变findViewById() 可以返回null 的事实。

标签: java android


【解决方案1】:

如果您查看开发人员文档:https://developer.android.com/reference/android/app/Activity.html#findViewById(int)

findViewById

View findViewById (int id)

从 XML 中查找由 id 属性标识的视图 在 onCreate(Bundle) 中处理。

Parameters

id 整数

Returns

查看 如果找到视图否则为 null

警告来自哪里

所以你看到变量listViewlistView = (ListView) findViewById(R.id.list);执行后可能为null。所以你会收到警告!

如何解决

您可以在 if 条件中提供如下的空值检查表达式:

if(adapter != null && listView !=null ) {
    listView.setAdapter(adapter);
}

【讨论】:

  • 谢谢Sanjeev,我知道可能找不到id,因此返回null。但我的问题是如何解决这个问题。附言。我刚刚重新加载了页面并阅读了您的新版本。它似乎工作,thx!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多