Не удается преобразовать объект типа java.lang.String в тип com.example.messenger.messenger.Friends - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу показать данные Firebase в RecyclerView.Firebase состоит из DatabaseReference "Friends" и имеет идентификатор пользователя, как вы можете видеть на картинке ниже,
enter image description here

Я хочу получить данные указанного id по этому коду,

mAuth = FirebaseAuth.getInstance();

mCurrent_user_id = mAuth.getCurrentUser().getUid();
queryFriends = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);

В приведенной выше строке .child (mCurrent_user_id) создает фатальную ошибку , и приложение выходит из строя.Я зарегистрировал mCurrent_user_id с помощью приведенного ниже кода, который дает правильный результат, такой же, как в справочной базе данных Friends .

Log.d("sdfsdf", mCurrent_user_id);

результат записи: com.example.messenger.messenger D/sdfsdf: wed5qPTCdcQVzVlRcBrMo1NX43v1

Код утилизатора:

queryFriends = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
        queryFriends.keepSynced(true);

        FirebaseRecyclerOptions<Friends> options =
                new FirebaseRecyclerOptions.Builder<Friends>()
                        .setQuery(queryFriends, Friends.class)
                        .build();

        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>(options) {
            @Override
            public FriendsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                // Create a new instance of the ViewHolder, in this case we are using a custom
                // layout called R.layout.message for each item
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.adapter_users_activity_layout, parent, false);

                return new FriendsViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(final FriendsViewHolder friendsViewHolder, int position, Friends friends) {
                friendsViewHolder.setDate(friends.getDate());
}

Просмотр:

public static class FriendsViewHolder extends RecyclerView.ViewHolder {

        View mView;

        public FriendsViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }

        public void setDate(String date){
            TextView userStatusView = (TextView) mView.findViewById(R.id.user_single_status);
            userStatusView.setText(date);
        }

        public void setName(String name){
            TextView userNameView = (TextView) mView.findViewById(R.id.user_single_name);
            userNameView.setText(name);
        }

Исключение:

E/AndroidRuntime: FATAL EXCEPTION: main
    com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.messenger.messenger.Friends
        at com.google.android.gms.internal.zzelw.zzb(Unknown Source)
        at com.google.android.gms.internal.zzelw.zza(Unknown Source)

Правила: enter image description here

1 Ответ

0 голосов
/ 29 сентября 2018

Я полагаю, что эти строки вызывают проблему:

userNameView.setText(name);
userStatusView.setText(date);

У вашего ViewHolder есть проблема с установкой данных в представления.Попробуйте установить их в методе onBindViewHolder().

Обновление: Попробуйте что-то вроде этого Viewholder:

public class FriendsViewHolder extends RecyclerView.ViewHolder {

    TextView textName;
    TextView textDate;

    public FriendsViewHolder(View itemView) {
        super(itemView);

        textName = itemView.findViewById(R.id.user_single_name);
        textDate = itemView.findViewById(R.id.user_single_status);


    }

}

И это внутри onBindViewHolder():

friendsViewHolder.textName.setDate(friends.getName());
friendsViewHolder.textDate.setDate(friends.getDate());

Я предположил, что у вашего Adapter есть сеттеры-геттеры для get-set Date-Name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...