Не отображается список в RecyclerView
День добрый! Столкнулся с проблемой отображения списка в RecyclerView. Есть код:
NotificationFragment.java
public class NotificationFragment extends Fragment {
private DatabaseReference p_databaseReference;
private RecyclerView n_recycler;
private FirebaseRecyclerAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_notification, container, false);
n_recycler = view.findViewById(R.id.notes_list);
n_recycler.setLayoutManager(new LinearLayoutManager(getContext()));
p_databaseReference = FirebaseDatabase.getInstance().getReference()
.child("notes");
FloatingActionButton n_fab = view.findViewById(R.id.new_note_fab);
n_fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getChildFragmentManager();
CreateDialogFragment createDialogFragment = new CreateDialogFragment();
createDialogFragment.show(manager, "create_note_dialog");
}
});
return view;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions<CreateNote> options = new FirebaseRecyclerOptions.Builder<CreateNote>()
.setQuery(p_databaseReference, CreateNote.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<CreateNote, CreateNotesViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CreateNotesViewHolder holder, int position, @NonNull CreateNote model) {
Date current_date = new Date();
DateFormat date_format = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault());
final String data_text = date_format.format(current_date);
DateFormat time_format = new SimpleDateFormat("HH-mm-ss", Locale.getDefault());
final String time_text = time_format.format(current_date);
final String full_time = data_text + " " + time_text;
String key = getRef(position).getKey();
if (key != null) {
p_databaseReference
.child(key)
.child(full_time)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String notesTheme = dataSnapshot
.child("noteTheme").getValue().toString();
String notesText = dataSnapshot
.child("noteText").getValue().toString();
String notesTime = dataSnapshot
.child("noteTime").getValue().toString();
holder.note_theme.setText(notesTheme);
holder.note_text.setText(notesText);
holder.note_time.setText(notesTime);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
//
}
});
}
}
@NonNull
@Override
public CreateNotesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_list, parent, false);
return new CreateNotesViewHolder(view);
}
};
n_recycler.setAdapter(adapter);
adapter.startListening();
}
public static class CreateNotesViewHolder extends RecyclerView.ViewHolder {
TextView note_theme, note_text, note_time;
CreateNotesViewHolder(@NonNull View itemView) {
super(itemView);
note_theme = itemView.findViewById(R.id.note_user_theme);
note_text = itemView.findViewById(R.id.note_user_text);
note_time = itemView.findViewById(R.id.note_user_time);
}
}
}
и
CreateDialogFragment.java
public class CreateDialogFragment extends DialogFragment {
private EditText n_theme;
private EditText n_text;
private String user_name;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getActivity()));
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.create_note_dialog, null);
n_theme = view.findViewById(R.id.note_user_theme);
n_text = view.findViewById(R.id.note_user_text);
builder
.setTitle(getString(R.string.new_note))
.setIcon(R.drawable.ic_notifications_black_24dp)
.setView(view)
.setPositiveButton(getString(R.string.d_button_create), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Date current_date = new Date();
DateFormat date_format = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault());
String data_text = date_format.format(current_date);
DateFormat time_format = new SimpleDateFormat("HH-mm-ss", Locale.getDefault());
String time_text = time_format.format(current_date);
String full_time = data_text + " " + time_text;
FirebaseUser f_user = FirebaseAuth.getInstance().getCurrentUser();
if (f_user != null) {
user_name = f_user.getDisplayName();
}
String theme = n_theme.getText().toString();
String text = n_text.getText().toString();
FirebaseDatabase.getInstance()
.getReference()
.child("notes")
.child(user_name)
.child(full_time)
.setValue(new CreateNote(theme, text));
}
})
.setNegativeButton(getString(R.string.d_button_cancel), null);
return builder.create();
}
}
проблема в том, что при добавлении значения в БД приложение слетает. если убрать из пути к значению full_time, приложение работает, но список отображает только одно значение и при добавлении нового, просто меняет значение старого в списке. Подскажите, что не так!?
Лог падения:
2020-05-21 13:12:28.101 3010-3010/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.plaffrie, PID: 3010
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.plaffrie.ui.home.NotificationFragment$2$1.onDataChange(NotificationFragment.java:84)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
2020-05-21 13:12:28.131 3010-3010/? I/Process: Sending signal. PID: 3010 SIG: 9