0

Code

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contacts, container, false);

    noUsersText = (TextView) rootView.findViewById(R.id.noUsersText);
    mUsersList = (RecyclerView) rootView.findViewById(R.id.usersList);

    mAuth = FirebaseAuth.getInstance();
    currentUser = mAuth.getCurrentUser();
    UID = mAuth.getCurrentUser().getUid();
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");


    mProgressDialogue = new ProgressDialog(getActivity());
    mProgressDialogue.setMessage("Loading...");
    mProgressDialogue.show();


    mUsersList.setLayoutManager(new LinearLayoutManager(getActivity()));

    FirebaseRecyclerOptions<AllUsers> options =
            new FirebaseRecyclerOptions.Builder<AllUsers>()
                    .setQuery(mDatabaseReference, AllUsers.class)
                    .build();

    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsers, UsersViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull AllUsers model) {
            holder.setName(model.getName());
            holder.setStatus(model.getStatus());

            final String userId = getRef(position).getKey();

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("Data");

                    rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            userName = dataSnapshot.child("Name").getValue().toString();
                            Intent intent = new Intent(getActivity(), Chat.class);
                            intent.putExtra("Recievers_Id", userId);
                            intent.putExtra("Recievers_Name", userName);
                            startActivity(intent);
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });
                }
            });
        }
        @Override
        public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.all_users_layout, parent, false);
            return new UsersViewHolder(view);
        }
    };
    mUsersList.setAdapter(firebaseRecyclerAdapter);
    return rootView;
}

public static class UsersViewHolder extends RecyclerView.ViewHolder{
    View mView;
    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }
    public void setName(String name) {
        TextView mDisplayName = (TextView) mView.findViewById(R.id.display_name);
        mDisplayName.setText(name);
    }
    public void setStatus(String status) {
        TextView mDisplayStatus = (TextView) mView.findViewById(R.id.display_status);
        mDisplayStatus.setText(status);
    }
}

@Override
public void onStart() {
    super.onStart();
    firebaseRecyclerAdapter.startListening();
}
@Override
public void onStop() {
    super.onStop();
    if(firebaseRecyclerAdapter != null) {
        firebaseRecyclerAdapter.stopListening();
    }
}

}

Database - https://ibb.co/kLNqxd

When my database structure was Users/userid/'all the data' it was working fine. Now I just added one more child called Data and its not showing the data. Can someone help me out please?

Getting an error after trying the below 2 methods

Process: com.appmaster.akash.messageplus, PID: 15314
                                                                             com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.appmaster.akash.messageplus.HomeScreen_Contacts$UserData
                                                                                 at com.google.android.gms.internal.zzear.zzb(Unknown Source)
                                                                                 at com.google.android.gms.internal.zzear.zza(Unknown Source)
                                                                                 at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                                                 at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:23)
                                                                                 at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:14)
                                                                                 at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:32)
                                                                                 at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:45)
                                                                                 at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:103)
                                                                                 at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:118)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5458)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5724)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
                                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
                                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
                                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
                                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
                                                                                 at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3109)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
                                                                                 at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1630)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
                                                                                 at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
                                                                                 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                                 at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                                 at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
                                                                                 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                                 at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
                                                                                 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                                 at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                                 at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
                                                                                 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                                 at android.view.View.measure(View.java:18827)
                                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
                                                                                 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                                 at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
  • 1
    You've included a picture of the JSON tree in your question. Please replace that with the actual JSON as text, which you can easily get by clicking the Export JSON link in [your Firebase Database console](https://console.firebase.google.com/project/_/database/data/). Having the JSON as text makes it searchable, allows us to easily use it to test with your actual data and use it in our answer and in general is just a Good Thing to do. – Frank van Puffelen May 29 '18 at 18:46

2 Answers2

0

To solve this, please change the following line of code:

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");

to

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child("Data");
Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
0

My initial guess is that you need a Data member in the class that you pass to FirebaseRecyclerAdapter. Right now that class is AllUsers. So the simplest change is to create a new class for the Data:

public class UserData {
  public AllUsers Data;
}

So this is a simple class with just a public field called Data, which matches the Data property you added in your database.

Wire it up to FirebaseRecyclerAdapter with:

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");

FirebaseRecyclerOptions<UserData> options =
        new FirebaseRecyclerOptions.Builder<UserData>()
                .setQuery(mDatabaseReference, UserData.class)
                .build();

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UserData, UsersViewHolder>(options) {

    @Override
    protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserData model) {
        holder.setName(model.Data.getName());
        holder.setStatus(model.Data.getStatus());
        ...
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807