AsyncTask Fragment中RecyclerView设置Adapter时触发空指针异常
解决RecyclerView.setAdapter()触发的NullPointerException问题
你的错误日志已经明确指向了问题核心:Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(...)' on a null object reference——也就是说,你在onPostExecute里调用setAdapter()时,recyclerView对象是null。
问题根源
看你onCreateView方法里的这段代码:
// 1. get a reference to recyclerView //recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
这里你重新声明了一个局部的RecyclerView变量,而没有给类成员变量recyclerView赋值。局部变量会覆盖类成员的同名变量,导致类成员的recyclerView始终保持null状态。当异步任务的onPostExecute回调执行时,访问的是类成员的null对象,自然触发空指针异常。
修复方案
只需要去掉局部变量的类型声明,直接给类成员变量赋值即可:
// 去掉前面的RecyclerView,直接为类成员变量赋值 recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
修复后的完整onCreateView方法片段:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_rss, container, false); Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); //for crate home button AppCompatActivity activity = (AppCompatActivity) getActivity(); activity.setSupportActionBar(toolbar); //toolbar.setTitle("News"); activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 1. get a reference to recyclerView // 修复:直接给类成员变量赋值,不再声明局部变量 recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); // 2. set layoutManger recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); // recyclerView.setLayoutManager(linearLayoutManager); loadRSS(); return view; }
这样修改后,类成员的recyclerView就会被正确初始化,onPostExecute里调用setAdapter()时就不会再出现空指针异常了。
内容的提问来源于stack exchange,提问作者tonatiuhNava
相关产品推荐
相关产品推荐

