1

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 :

FIREBASE STRUCTURE

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 );
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Jess
  • 11
  • 2
  • Try to put `mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");` in `onCreateView` and then check. – Niamatullah Bakhshi Mar 22 '18 at 21:58
  • 1
    did u make sure this is returning a value? final String user_id = projectPost.getUser_id(); – Levi Moreira Mar 22 '18 at 22:19
  • I put mUsersDatabase in onCreate and I got this error instead : 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:110) – Jess Mar 23 '18 at 10:27
  • and String user_id =projectPost.getUser_id(); returns the user id any ideas? – Jess Mar 23 '18 at 10:28
  • **[This](https://stackoverflow.com/questions/49383687/how-can-i-retrieve-data-from-firebase-to-my-adapter/49384849)** is how you can retrieve data from Firebase Realtime database and display it in a `RecyclerView` using `FirebaseRecyclerAdapter`. – Alex Mamo Mar 23 '18 at 10:47
  • I think there is a bug in my code because sometimes it runs without any errors sometimes it crashes with the error above. Thanks I will have a look and try the recommendation. – Jess Mar 23 '18 at 11:09

0 Answers0