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

Fragment解析JSON时Context报错,求代码问题排查与解决

Fragment中RecyclerView上下文报错问题解决

核心问题:QuotesFragment的setupRecyclerView方法中,传入的this上下文出现红线报错:

private void setupRecyclerView(List<QuotesModel> quotesModelList) {
    QuotesAdapter quotesAdapter = new QuotesAdapter(this,quotesModelList);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(quotesAdapter);
}

问题原因及修复方案


1. 上下文类型不匹配

QuotesAdapter的构造函数要求传入Context类型参数,但Fragment中的this指向的是Fragment实例,而非Context对象,这是直接报错的原因。

修复: 将this替换为requireContext()(推荐,更安全,会检查上下文是否有效)或getActivity():

private void setupRecyclerView(List<QuotesModel> quotesModelList) {
    QuotesAdapter quotesAdapter = new QuotesAdapter(requireContext(), quotesModelList);
    recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
    recyclerView.setAdapter(quotesAdapter);
}

2. 集合初始化顺序错误

当前onCreateView中先调用jsonrequest()再初始化quotesModelList,会导致Volley请求回调中往空集合添加数据,引发潜在空指针异常。

修复: 调整顺序,先初始化集合再发起请求:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_quotes, container, false);
    recyclerView = view.findViewById(R.id.quotesRecyclerView);
    quotesModelList = new ArrayList<>(); // 先初始化集合
    jsonrequest(); // 再发起网络请求
    return view;
}

3. Volley请求队列上下文优化

创建Volley请求队列时,使用QuotesFragment.this不如requireContext()安全,后者能避免Fragment已脱离Activity时的上下文失效问题。

修复:

requestQueue = Volley.newRequestQueue(requireContext());
requestQueue.add(request);

内容的提问来源于stack exchange,提问作者Usman Ijaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:01:44