安卓工作室“;Can';t转换类型为java.lang.String的对象";崩溃错误
我对编码很陌生,在YouTube上找到了一个教程。糟糕的是,它没有按应有的方式工作。应用程序在调试控制台中不断崩溃,并显示以下消息:安卓工作室“;Can';t转换类型为java.lang.String的对象";崩溃错误,java,android,Java,Android,我对编码很陌生,在YouTube上找到了一个教程。糟糕的是,它没有按应有的方式工作。应用程序在调试控制台中不断崩溃,并显示以下消息: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.proprietaire.lovechatting, PID: 30321 com.google.firebase.database.DatabaseException: Can't co
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.proprietaire.lovechatting, PID: 30321
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.proprietaire.lovechatting.Friends
at com.google.android.gms.internal.zg.zzb(Unknown Source:278)
at com.google.android.gms.internal.zg.zza(Unknown Source:0)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
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)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1769)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19758)
at android.view.ViewGroup.layout(ViewGroup.java:6079)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
我不知道如何修理它。这是我朋友给我的代码:
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;
}
}
下面是朋友片段:
public class FriendsFragment extends Fragment
{
private RecyclerView myFriendsList;
private DatabaseReference FriendsReference;
private DatabaseReference UsersReference;
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);
FriendsReference.keepSynced(true);
UsersReference = FirebaseDatabase.getInstance().getReference().child("Users");
UsersReference.keepSynced(true);
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)
{
viewHolder.setDate(model.getDate());
String list_user_id = getRef(position).getKey();
UsersReference.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
String userName = dataSnapshot.child("user_name").getValue().toString();
String thumbImage = dataSnapshot.child("user_thumb_image").getValue().toString();
FriendsViewHolder.setUserName(userName);
FriendsViewHolder.setThumbImage(thumbImage, getContext());
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
}
};
myFriendsList.setAdapter(firebaseRecyclerAdapter);
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder
{
static 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);
}
public static void setUserName(String userName)
{
TextView userNameDisplay = (TextView) mView.findViewById(R.id.all_users_username);
userNameDisplay.setText(userName);
}
public static void setThumbImage(final String thumbImage, final Context ctx)
{
final CircleImageView thumb_image = (CircleImageView) mView.findViewById(R.id.all_users_profile_image);
Picasso.with(ctx).load(thumbImage).networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.default_profile)
.into(thumb_image, new Callback() {
@Override
public void onSuccess()
{
}
@Override
public void onError()
{
Picasso.with(ctx).load(thumbImage).placeholder(R.drawable.default_profile)
.into(thumb_image);
}
});
}
}
}
公共类FriendsFragment扩展了片段
{
私人回收站查看我的朋友列表;
私人数据库参考朋友参考;
私有数据库引用用户引用;
私人消防队;
字符串online\u user\u id;
私有视图myMainView;
公益碎片(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
myMainView=充气机。充气(R.layout.fragment\u friends,container,false);
myFriendsList=(RecyclerView)myMainView.findViewById(R.id.friends\u列表);
mAuth=FirebaseAuth.getInstance();
在线用户id=mAuth.getCurrentUser().getUid();
FriendsReference=FirebaseDatabase.getInstance().getReference().child(“朋友”).child(在线用户id);
FriendsReference.keepSynced(真);
UsersReference=FirebaseDatabase.getInstance().getReference().child(“用户”);
UsersReference.keepSynced(true);
setLayoutManager(新的LinearLayoutManager(getContext());
//为该碎片膨胀布局
返回myMainView;
}
@凌驾
public void onStart()
{
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter
=新的FirebaseRecyclerAdapter
(
朋友们,同学们,
R.layout.所有用户显示布局,
FriendsViewHolder.class,
朋友参考
)
{
@凌驾
受保护的void populateViewHolder(友元viewHolder、友元模型、int位置)
{
setDate(model.getDate());
String list_user_id=getRef(position).getKey();
UsersReference.child(list\u user\u id).addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot)
{
字符串userName=dataSnapshot.child(“用户名”).getValue().toString();
字符串thumbImage=dataSnapshot.child(“user_thumb_image”).getValue().toString();
设置用户名(userName);
setThumbImage(thumbImage,getContext());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError)
{
}
});
}
};
myFriendsList.setAdapter(firebaseRecyclerAdapter);
}
公共静态类FriendsViewHolder扩展了RecyclerView.ViewHolder
{
静态视图mView;
公众朋友查看文件夹(查看项目视图)
{
超级(项目视图);
mView=项目视图;
}
公共无效设置日期(字符串日期)
{
TextView-sinceFriendsDate=(TextView)mView.findViewById(R.id.all\u users\u status);
sinceFriendsDate.setText(日期);
}
公共静态void setUserName(字符串用户名)
{
TextView用户名显示=(TextView)mView.findviewbyd(R.id.all\u users\u username);
usernamesplay.setText(用户名);
}
公共静态void setThumbImage(最终字符串thumbImage,最终上下文ctx)
{
最终CircleImageView thumb\u image=(CircleImageView)mView.findViewById(R.id.all\u users\u profile\u image);
毕加索.with(ctx).load(thumbImage).networkPolicy(networkPolicy.OFFLINE).placeholder(R.drawable.default\u配置文件)
.into(thumb_图像,新回调(){
@凌驾
成功时的公共无效()
{
}
@凌驾
公开无效
{
毕加索.with(ctx).load(thumbImage).placeholder(R.drawable.default_配置文件)
.into(拇指图像);
}
});
}
}
}
如果有人有任何想法,请告诉我。就像我说的,当有人发送好友请求时,另一个人打开应用程序,当他打开任何片段时,除非设置和用户列表,否则就会崩溃。我试图编码(复制)的是一个好友片段,当好友请求被接受时,它会在其中显示您的好友。我认为这会起作用
String userName = dataSnapshot.child("user_name").getValue(String.class);
String thumbImage = dataSnapshot.child("user_thumb_image").getValue(String.class);
这里,getValue()方法将此快照中包含的数据作为本机类型返回。您正在尝试将对象转换为字符串,而不是无效的类型转换。请使用同一类中的另一个方法,如果String.class作为参数传递,该方法将返回字符串数据类型中的值。请解释它将如何以及为什么“执行此操作”。OP可能需要理解,而不是“魔法”。