You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView触发NullPointerException崩溃问题求助

解决RecyclerView NullPointerException崩溃问题

嘿,我一眼就揪出问题所在啦!你的崩溃原因很明确——你把还没初始化的WordList传给了RecyclerAdapter,导致Adapter里的列表一直是null,当RecyclerView调用Adapter的getItemCount()方法时,自然就触发了NullPointerException(因为你在调用一个null对象的size()方法)。

问题出在代码顺序上

看你的MainActivity的onCreate方法:

recyclerView = findViewById(R.id.recyclerView);
// 这里WordList还没初始化,是null!
recyclerAdapter = new RecyclerAdapter(WordList);
recyclerView.setAdapter(recyclerAdapter);
// ... 然后才初始化WordList并添加数据
WordList = new ArrayList<>();
WordList.add("First");
// ... 其他add操作

你先把null的WordList传给了Adapter,之后才去实例化列表并添加数据,但Adapter拿到的始终是最初的那个null引用,根本没拿到你后来创建的列表。

修复步骤

1. 调整代码顺序,先初始化列表再创建Adapter

把代码改成这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = findViewById(R.id.recyclerView);

    // 第一步:先初始化列表并添加所有数据
    WordList = new ArrayList<>();
    WordList.add("First");
    WordList.add("Chairman's (צ'רמנז)");
    WordList.add("The Cheesy Poofs 254 (צ'יזי פופס)");
    WordList.add("Hamosad 1657 (המוסד)");
    WordList.add("Orbit 1690 (אורביט)");
    WordList.add("Game Changers");
    WordList.add("Infinite Recharge");
    WordList.add("Deep Space");
    WordList.add("Power Up");
    WordList.add("Eyal Hershko (הרשקו המלך)");
    WordList.add("Washer (שייבה)");
    WordList.add("Soldering Iron (מלחם)");
    WordList.add("Soldering Paste (משחת הלחמה");
    WordList.add("Soldering Tin (בדיל)");
    WordList.add("RoboRio (רובוריו)");

    // 第二步:再创建Adapter并设置给RecyclerView
    recyclerAdapter = new RecyclerAdapter(WordList);
    recyclerView.setAdapter(recyclerAdapter);

    DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
    recyclerView.addItemDecoration(dividerItemDecoration);
}

2. 给Adapter加个空判断(双重保险)

为了防止后续其他场景下列表为null导致崩溃,建议在你的RecyclerAdapter的getItemCount()方法里添加空判断:

@Override
public int getItemCount() {
    // 如果列表不为null就返回size,否则返回0
    return WordList != null ? WordList.size() : 0;
}

另外注意你刚才误把row_item.xml的代码当成了RecyclerAdapter的代码,确保你的Adapter类是正确的,比如基本结构应该像这样:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    private List<String> wordList;

    // 构造方法接收列表
    public RecyclerAdapter(List<String> wordList) {
        this.wordList = wordList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 加载row_item布局
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        // 绑定数据到TextView
        holder.textView.setText(wordList.get(position));
    }

    @Override
    public int getItemCount() {
        return wordList != null ? wordList.size() : 0;
    }

    // ViewHolder类
    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

这样调整后,你的RecyclerView就能正常加载数据啦!

内容的提问来源于stack exchange,提问作者רועי פנחסי

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:37:35