java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.example.pro.mychatapp.Friends

标签 java android firebase chat

日志 这就是我得到的

我遇到以下错误 com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为类型

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.pro.mychatapp.Friends
        at com.google.android.gms.internal.zg.zzb(Unknown Source)
        at com.google.android.gms.internal.zg.zza(Unknown Source)
        at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
        at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:22)
        at com.firebase.ui.database.ObservableSnapshotArray.getObject(ObservableSnapshotArray.java:141)
        at com.firebase.ui.database.CachingObservableSnapshotArray.getObject(CachingObservableSnapshotArray.java:40)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:127)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:164)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)

FirendsFragment.java

我只想显示好友列表

package com.example.pro.mychatapp;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

/**
 * A simple {@link Fragment} subclass.
 */
public class FriendsFragment extends Fragment {

    private RecyclerView myFriendsList;

    private DatabaseReference FriendsReference;
    private FirebaseAuth mAuth;

    String online_user_id;

    private View myMainView;

    public FriendsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        myMainView = inflater.inflate(R.layout.fragment_friends, container, false);


        myFriendsList = (RecyclerView) myMainView.findViewById(R.id.friends_list);

        mAuth = FirebaseAuth.getInstance() ;
        online_user_id = mAuth.getCurrentUser().getUid();

        FriendsReference = FirebaseDatabase.getInstance().getReference().child("Friends").child(online_user_id);


        myFriendsList.setLayoutManager(new LinearLayoutManager(getContext()));

        // Inflate the layout for this fragment
        return myMainView;


    }

    @Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerAdapter<Friends, FriendsViewHolder > firebaseRecyclerAdapter =
                new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>
                        (
                                Friends.class,
                                R.layout.all_users_display_layout,
                                FriendsViewHolder.class,
                                FriendsReference

                         )
                {
                    @Override
                    protected void populateViewHolder(FriendsViewHolder viewHolder, Friends model, int position)
                    {
                        System.out.println("********************************************************************");

                        viewHolder.setDate(model.getDate());

                    }
                };

        myFriendsList.setAdapter(firebaseRecyclerAdapter);
    }

    public static class FriendsViewHolder extends RecyclerView.ViewHolder
    {
        View mView;


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

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

Friends.java

package com.example.pro.mychatapp;



public class Friends {
    public  String date;



    public Friends()
    {

    }
    public Friends(String date)
    {
        this.date = date;
    }

    public String getDate()
    {
        return date;
    }

    public void setDate(String date)
    {
        this.date = date;
    }
}

我可以知道是什么问题吗?我是 firebase 新手,需要您的帮助。我在这里读到了一些类似的问题,但我仍然无法解决我的问题。这里有专家可以帮助我吗?

最佳答案

据我所知,这里可能会发生一些事情。

1.) 解析 datasnapshot --> 对象时,Friends 模型上“date”属性的数据无法匹配命名约定。我在数据库中看不到您的对象的示例,因此只需澄清一下。

2.) 这行代码似乎正在检索单个子对象,该子对象是键而不是 Friend 对象。

FriendsReference = FirebaseDatabase.getInstance().getReference().child("Friends").child(online_user_id);

相反,我假设您想要使用 FirebaseListOptions并使用指定用户好友的查询进行填充。

3.) 这是一个罚款 example您尝试执行的基本案例, 我肯定会用它作为引用。

基于错误

关于java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.example.pro.mychatapp.Friends,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633651/

相关文章:

java - Kotlin Random和Java Random之间的分布差异

android - 垂直滚动 TextView 的渐变边缘

java - Android Client 和 PC Server 使用套接字通信

firebase - 将设备组添加到 Firebase 中的主题?

java - 我有理由调用 Integer.hashCode() 吗?

java - 是否有一个 Java 映射只接受一个条目并允许从映射中获取值?

javascript - 使用带有 onSnapshot 的索引进行 Firestore 查询,其中字段不等于值

java - Firestore - 使用 CountDownLatch 等待任务完成 - 挂起应用程序

java - 如何使用 ASM 检查方法的局部变量?

java - 当我单击按钮时导航屏幕打开,但当我再次单击它时它不会再次关闭