gpt4 book ai didi

java - 为什么我的 fragment 不能显示来自 recyclerview 的数据?

转载 作者:行者123 更新时间:2023-11-30 10:01:38 25 4
gpt4 key购买 nike

在这里发帖之前,我花了相当多的时间自己弄清楚,不过我已经删除了各种错误。我正在开发一个小的 notesapp,一切正常,直到我在我的应用程序中使用包含回收 View 的 fragment 。问题是我无法将从数据库检索到的数据传递给 recyclerview 适配器。

错误显示“尝试在空对象引用上调用虚方法‘void com.example.diary.RecyclerAdapter.setdata(java.util.List)’”

我已经验证了数据不为空,我很困惑为什么我会得到一个空指针错误。

相关代码贴在下面。

fragment .java

 @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_recents, container, false);
RecyclerAdapter adapter;
db = NotesDatabase.createdb(getContext());

adapter = new RecyclerAdapter(numofitems);
retrievetasks();
layoutManager = new LinearLayoutManager(getActivity());
binding = DataBindingUtil.setContentView(getActivity(), R.layout.fragment_recents);
binding.recyclerView.setLayoutManager(layoutManager);
binding.recyclerView.setAdapter(adapter);
Log.d("adapeter", "has set");
return view;
}

public void retrievetasks() {
try {
LiveData<List<NotesEntry>> notesEntries = db.Dao().loadalltasks();
notesEntries.observe(this, new Observer<List<NotesEntry>>() {
@Override
public void onChanged(List<NotesEntry> notesEntries) {
notes = notesEntries;
Log.d("sizeforall", String.valueOf(notesEntries.size()));
adapter.setdata(notesEntries); //this is where the error occures }
});

'adapter.setdata(notesEntries);//这是错误发生的地方'

适配器.java

 public void setdata(List<NotesEntry> notesEntries) {
try {
notesEntryList = notesEntries;
notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
public List<NotesEntry> getnotesentries() {
return notesEntryList;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
try {
NotesEntry notesEntries = notesEntryList.get(position);
id = notesEntries.getId();
text = notesEntries.getText();
// b1.setText(String.valueOf(id));
textview1.setText(text);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
if (!notesEntryList.isEmpty()) {
Log.d("sizereturned", String.valueOf(notesEntryList.size()));
return notesEntryList.size();
} else
Log.d("sizereturned1", String.valueOf(notesEntryList.size()));
return 0; }

如果我不使用 fragment ,则不会出现此问题。感谢任何帮助。

最佳答案

您需要在初始化适配器后调用retrievetasks() 方法。这是导致问题的原因

adapter = new RecyclerAdapter(numofitems);
retrievetasks();

关于java - 为什么我的 fragment 不能显示来自 recyclerview 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57342458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com