使用回收器适配器获取空指针

Posted

技术标签:

【中文标题】使用回收器适配器获取空指针【英文标题】:Getting null pointer with recycler adapter 【发布时间】:2015-08-16 23:03:58 【问题描述】:

我的应用程序由于片段代码中带有 recyclerview 适配器的空指针而崩溃。我正在使用此适配器生成卡片视图列表,但无法找出导致此空指针的确切原因。在水龙头类中设置适配器 r.setAdapter(rA) 时发生日志。

片段代码

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)


    v = inflater.inflate(R.layout.faucetcards, container, false);
    r = (RecyclerView) getActivity().findViewById(R.id.feedRecyclerView);

    rA = new RecyclerAdapter(generateCards());
    lm = new LinearLayoutManager(getActivity());
    r.setAdapter(rA);
    r.setLayoutManager(lm);

    return v;

更新:

我的错误在于 r 或设置适配器。这就是空指针出现的地方,即使 rA 不为空

【问题讨论】:

您也可以发布FaucetHolder 课程。它在哪里? 我认为这两行代码this.faucets = faucetsI; this.faucets.addAll(faucets); 存在一些问题,您试图在其中复制水龙头列表。您在代码中的哪一点遇到异常您是否尝试过调试? 在水龙头类中设置适配器r.setAdapter(rA)时出现日志 你能发布你的水龙头课程吗? 你试过调试吗?堆栈跟踪应该为您提供一个良好的起点。 【参考方案1】:

r.set adapter(rA) 处的 Nullpointer 发生是因为 r 为空。

r 为 null 的原因是你试图在 Fragment 的父 Activity 中找到 RecyclerView。但是 RecyclerView 包含在 Fragment 的布局中,您在 onCreateView 方法中对其进行了膨胀并存储在 v 中。所以您应该做的是:

r = (RecyclerView) v.findViewById(R.id.feedRecyclerView);

【讨论】:

以上是关于使用回收器适配器获取空指针的主要内容,如果未能解决你的问题,请参考以下文章

在android spinner上获取空指针

Android:简单的适配器空指针

使用异步任务时光标变为空?

片段中的 Listview 适配器给出空指针异常

自定义页面适配器上的空指针异常

在扩展数组适配器时自定义适配器的getView()中的空指针异常