Antes de postar aqui, passei um tempo considerável para descobrir sozinho, eu ter removido vários erros embora. Estou desenvolvendo um pouco notesapp, evrything bem trabalhou até que eu usei fragmentos em meu aplicativo que contém um problema view.The reciclador é que eu não pode passar os dados recuperados do banco de dados para adaptador recyclerview.
o erro diz "Tentativa de chamar o método virtual 'vazio com.example.diary.RecyclerAdapter.setdata (java.util.List)' em uma referência nula objeto"
i ter verificado que os dados não está vazio, iam confuso Por que recebo um erro de ponteiro nulo.
códigos relevantes são postados abaixo.
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); // Isto é onde a occures erro
adapter.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; }
E se eu não fragmentos de uso, este isuue não ajuda arise.Any é apreciado.
Você precisa chamar retrievetasks()
método depois de inicializar o adaptador. Isso está causando o problema
adapter = new RecyclerAdapter(numofitems);
retrievetasks();