I keep getting errors and I am a crap coder. I am trying to retrieve posts which are called projects from Firebase Real-time database in android and I am using fragments since it's part of my navigation method.
I understand the error :
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.example.jess.jobdone.ProjectFragment$1$1.onDataChange(ProjectFragment.java:108) at com.google.android.gms.internal.zzegf.zza(Unknown Source:13)
This is the firebase :
This is the code , it's in a fragment class , couldn't post everything in stackoverflow
private DatabaseReference mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate( R.layout.fragment_project, container, false );
work_list_view = view.findViewById( R.id.work_list_view );
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
work_list_view.setHasFixedSize(true);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
mUsersDatabase.keepSynced(true);
return view;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<ProjectPost, ProjectPostHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ProjectPost, ProjectPostHolder>(
ProjectPost.class,
R.layout.project_list_item,
ProjectPostHolder.class,
mDatabase
) {
@Override
protected void populateViewHolder(final ProjectPostHolder viewHolder, final ProjectPost projectPost, int position) {
//this retrieves data of the actual post only
viewHolder.setDescText(projectPost.getDesc());
viewHolder.setImage( getContext() ,projectPost.getImage_url() );
viewHolder.setUserImage(projectPost.getImage_thumb() ,getContext());
final String user_id = projectPost.getUser_id();
//this retrieves data of the user that has posted something
mUsersDatabase.child( user_id ).addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String userName = dataSnapshot.child("name").getValue().toString();
String userThumb = dataSnapshot.child("thumb_image").getValue().toString();
viewHolder.setUsername(userName);
viewHolder.setUserImage(userThumb, getContext());
//this is a very important function which create a chat between the users
viewHolder.mes.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), userName, Toast.LENGTH_SHORT).show();
Intent chatIntent = new Intent( getContext(), ChatActivity.class );
chatIntent.putExtra( "user_id", user_id);
chatIntent.putExtra("user_name", userName);
startActivity( chatIntent );
}
} );
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
} );
}
};
work_list_view.setAdapter( firebaseRecyclerAdapter );