Android Can';t将java.lang.String类型的对象转换为com.example.messenger.messenger.Friends类型
我想在RecyclerView中显示Firebase数据。firebase由数据库参考“Friends”组成,用户id如下图所示,Android Can';t将java.lang.String类型的对象转换为com.example.messenger.messenger.Friends类型,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想在RecyclerView中显示Firebase数据。firebase由数据库参考“Friends”组成,用户id如下图所示, 我想通过此代码获取特定id的数据 mAuth = FirebaseAuth.getInstance(); mCurrent_user_id = mAuth.getCurrentUser().getUid(); queryFriends = FirebaseDatabase.getInstance().getReference().child("Friends")
我想通过此代码获取特定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:wed5qptcdcqvzvlrcbmo1nx43v1
回收商代码:
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());
}
例外情况:
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)
规则:
我认为以下几行是问题的根源:
userNameView.setText(name);
userStatusView.setText(date);
您的ViewHolder
在将数据设置到视图中时出现问题。请尝试在onBindViewHolder()
方法中设置这些
更新:作为您的视图持有者尝试以下操作:
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);
}
}
friendsViewHolder.textName.setDate(friends.getName());
friendsViewHolder.textDate.setDate(friends.getDate());
在onBindViewHolder()中,这是:
我假设您的适配器
具有用于设置日期名称的setters-getter。您可以给出您的logcat或致命错误的名称吗?无法将java.lang.String类型的对象转换为com.example.messenger.messenger.Friendshow类型我可以这样做?同样的错误无法将java.lang.String类型的对象转换为类型com.example.messenger.messenger.Friends控件在我使用此控件时无法进入OnBindViewHolder(),然后程序工作正常queryFriends=FirebaseDatabase.getInstance().getReference().child(“朋友”);但我需要“朋友”的孩子
friendsViewHolder.textName.setDate(friends.getName());
friendsViewHolder.textDate.setDate(friends.getDate());