com.google.firebase.database.DatabaseException: 无法将类型 java.lang.String 的对象转换为类型 com.example.whatsappclone.User
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.whatsappclone.User
我无法从 Firebase 检索数据它总是崩溃说:
com.google.firebase.database.DatabaseException: Can't convert object
of type java.lang.String to type com.example.whatsappclone.User
这是我的模型Class
public class User {
String uid, name, phoneNumber, profileImage;
public User()
{
}
public User(String uid, String name, String phoneNumber, String profileImage) {
this.uid = uid;
this.name = name;
this.phoneNumber = phoneNumber;
this.profileImage = profileImage;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getProfileImage() {
return profileImage;
}
public void setProfileImage(String profileImage) {
this.profileImage = profileImage;
}
}
这是我的 ViewHolder Class
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
Context context;
ArrayList<User> users;
public UsersAdapter(Context context, ArrayList<User>users) {
this.context = context;
this.users = users;
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.conversation_layout, parent, false);
return new UsersViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) {
User user = users.get(position);
holder.binding.userName.setText(user.getName());
Glide.with(context).load(user.getProfileImage())
.into(holder.binding.profile);
}
@Override
public int getItemCount() {
return users.size();
}
public class UsersViewHolder extends RecyclerView.ViewHolder {
ConversationLayoutBinding binding;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
binding = ConversationLayoutBinding.bind(itemView);
}
}
}
这是我的 MainActivity
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
FirebaseDatabase database;
ArrayList<User> users;
UsersAdapter usersAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
database = FirebaseDatabase.getInstance();
users = new ArrayList<>();
usersAdapter = new UsersAdapter(this, users);
binding.recyclerView.setAdapter(usersAdapter);
database.getReference().child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
users.clear();
for (DataSnapshot snapshot1 : snapshot.getChildren())
{
User user = snapshot1.getValue(User.class);
users.add(user);
}
usersAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
我的 Firebase 数据库结构化
Firebase Database Strucuture
Firebase JSON
{ "users" : {
"A5DEg64d47StvLuvRtLWiu1bHSC3" : {
"name" : "Rahul Singh",
"phoneNumber" : "+918350877517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=55fcdc75-da0c-43f5-8f9c-44bfa7df500f",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3"
},
"CO6Yw59BHweNJ03UdbcsGq4kyXY2" : {
"name" : "Alok Bhai",
"phoneNumber" : "+919886542409",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FCO6Yw59BHweNJ03UdbcsGq4kyXY2?alt=media&token=b006e40d-e8df-4b96-9165-d980cd018af3",
"uid" : "CO6Yw59BHweNJ03UdbcsGq4kyXY2"
},
"F8mhqJk4POeLFWxpF373K2D8DYG2" : {
"name" : "radhe govind'",
"phoneNumber" : "+916378757808",
"profileImage" : "No Image",
"uid" : "F8mhqJk4POeLFWxpF373K2D8DYG2"
},
"NOt57HC59DZm1s5XaBk0mHb9H553" : {
"name" : "Mohit Dada",
"phoneNumber" : "+917853471027",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FNOt57HC59DZm1s5XaBk0mHb9H553?alt=media&token=6aba255c-5f96-4ba1-a4a4-b998d3ae5b4a",
"uid" : "NOt57HC59DZm1s5XaBk0mHb9H553"
},
"XnJUq8LzauZPCLCi5v4SeCGgSPa2" : {
"name" : "Alok Singh Deshwal",
"phoneNumber" : "+919960726182",
"profileImage" : "No Image",
"uid" : "XnJUq8LzauZPCLCi5v4SeCGgSPa2"
},
"ZIcwyjMGC3Yk5GrT7vIeTxphQPt2" : {
"name" : "Anku Bhai",
"phoneNumber" : "+919094974311",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FZIcwyjMGC3Yk5GrT7vIeTxphQPt2?alt=media&token=5773be33-d610-4f8d-8bbd-d655e5228666",
"uid" : "ZIcwyjMGC3Yk5GrT7vIeTxphQPt2"
},
"kE3i5DsP9DTorG5DkJ4Vy7nArwZ2" : {
"name" : "Prinshu",
"phoneNumber" : "+91989600555",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FkE3i5DsP9DTorG5DkJ4Vy7nArwZ2?alt=media&token=e4d13d95-3906-4bdf-aaac-028816e490d5",
"uid" : "kE3i5DsP9DTorG5DkJ4Vy7nArwZ2"
},
"name" : "Vivek Fauzdar",
"phoneNumber" : "+916486627517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=cf8613fb-ae66-4892-bd79-4affa89d86e4",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3",
"vYfKxxkvoCV0p4c4P64t3F1IrEn1" : {
"name" : "Om Swami",
"phoneNumber" : "+919887012345",
"profileImage" : "No Image",
"uid" : "vYfKxxkvoCV0p4c4P64t3F1IrEn1"
}
}
}
您收到以下错误:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.whatsappclone.User
因为在你的“users”下面不仅有User对象,还有字符串:
"name" : "Vivek Fauzdar",
"phoneNumber" : "+916486627517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=cf8613fb-ae66-4892-bd79-4affa89d86e4",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3",
当您使用以下代码行时:
User user = snapshot1.getValue(User.class);
这意味着您正在尝试将每个子对象映射到类型为 User
的对象中,这是不可能的,因为您将 User
对象与字符串混合,因此会出现该错误。最简单的解决方案是删除所有这些字符串,并确保“用户”节点下只有 User
个对象。代码看起来不错。
看,所有这些子项都存在于“用户”节点下。
我无法从 Firebase 检索数据它总是崩溃说:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.whatsappclone.User
这是我的模型Class
public class User {
String uid, name, phoneNumber, profileImage;
public User()
{
}
public User(String uid, String name, String phoneNumber, String profileImage) {
this.uid = uid;
this.name = name;
this.phoneNumber = phoneNumber;
this.profileImage = profileImage;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getProfileImage() {
return profileImage;
}
public void setProfileImage(String profileImage) {
this.profileImage = profileImage;
}
}
这是我的 ViewHolder Class
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
Context context;
ArrayList<User> users;
public UsersAdapter(Context context, ArrayList<User>users) {
this.context = context;
this.users = users;
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.conversation_layout, parent, false);
return new UsersViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) {
User user = users.get(position);
holder.binding.userName.setText(user.getName());
Glide.with(context).load(user.getProfileImage())
.into(holder.binding.profile);
}
@Override
public int getItemCount() {
return users.size();
}
public class UsersViewHolder extends RecyclerView.ViewHolder {
ConversationLayoutBinding binding;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
binding = ConversationLayoutBinding.bind(itemView);
}
}
}
这是我的 MainActivity
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
FirebaseDatabase database;
ArrayList<User> users;
UsersAdapter usersAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
database = FirebaseDatabase.getInstance();
users = new ArrayList<>();
usersAdapter = new UsersAdapter(this, users);
binding.recyclerView.setAdapter(usersAdapter);
database.getReference().child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
users.clear();
for (DataSnapshot snapshot1 : snapshot.getChildren())
{
User user = snapshot1.getValue(User.class);
users.add(user);
}
usersAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
我的 Firebase 数据库结构化
Firebase Database Strucuture
Firebase JSON
{ "users" : {
"A5DEg64d47StvLuvRtLWiu1bHSC3" : {
"name" : "Rahul Singh",
"phoneNumber" : "+918350877517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=55fcdc75-da0c-43f5-8f9c-44bfa7df500f",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3"
},
"CO6Yw59BHweNJ03UdbcsGq4kyXY2" : {
"name" : "Alok Bhai",
"phoneNumber" : "+919886542409",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FCO6Yw59BHweNJ03UdbcsGq4kyXY2?alt=media&token=b006e40d-e8df-4b96-9165-d980cd018af3",
"uid" : "CO6Yw59BHweNJ03UdbcsGq4kyXY2"
},
"F8mhqJk4POeLFWxpF373K2D8DYG2" : {
"name" : "radhe govind'",
"phoneNumber" : "+916378757808",
"profileImage" : "No Image",
"uid" : "F8mhqJk4POeLFWxpF373K2D8DYG2"
},
"NOt57HC59DZm1s5XaBk0mHb9H553" : {
"name" : "Mohit Dada",
"phoneNumber" : "+917853471027",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FNOt57HC59DZm1s5XaBk0mHb9H553?alt=media&token=6aba255c-5f96-4ba1-a4a4-b998d3ae5b4a",
"uid" : "NOt57HC59DZm1s5XaBk0mHb9H553"
},
"XnJUq8LzauZPCLCi5v4SeCGgSPa2" : {
"name" : "Alok Singh Deshwal",
"phoneNumber" : "+919960726182",
"profileImage" : "No Image",
"uid" : "XnJUq8LzauZPCLCi5v4SeCGgSPa2"
},
"ZIcwyjMGC3Yk5GrT7vIeTxphQPt2" : {
"name" : "Anku Bhai",
"phoneNumber" : "+919094974311",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FZIcwyjMGC3Yk5GrT7vIeTxphQPt2?alt=media&token=5773be33-d610-4f8d-8bbd-d655e5228666",
"uid" : "ZIcwyjMGC3Yk5GrT7vIeTxphQPt2"
},
"kE3i5DsP9DTorG5DkJ4Vy7nArwZ2" : {
"name" : "Prinshu",
"phoneNumber" : "+91989600555",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FkE3i5DsP9DTorG5DkJ4Vy7nArwZ2?alt=media&token=e4d13d95-3906-4bdf-aaac-028816e490d5",
"uid" : "kE3i5DsP9DTorG5DkJ4Vy7nArwZ2"
},
"name" : "Vivek Fauzdar",
"phoneNumber" : "+916486627517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=cf8613fb-ae66-4892-bd79-4affa89d86e4",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3",
"vYfKxxkvoCV0p4c4P64t3F1IrEn1" : {
"name" : "Om Swami",
"phoneNumber" : "+919887012345",
"profileImage" : "No Image",
"uid" : "vYfKxxkvoCV0p4c4P64t3F1IrEn1"
}
} }
您收到以下错误:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.whatsappclone.User
因为在你的“users”下面不仅有User对象,还有字符串:
"name" : "Vivek Fauzdar",
"phoneNumber" : "+916486627517",
"profileImage" : "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-b908d.appspot.com/o/Profiles%2FA5DEg64d47StvLuvRtLWiu1bHSC3?alt=media&token=cf8613fb-ae66-4892-bd79-4affa89d86e4",
"uid" : "A5DEg64d47StvLuvRtLWiu1bHSC3",
当您使用以下代码行时:
User user = snapshot1.getValue(User.class);
这意味着您正在尝试将每个子对象映射到类型为 User
的对象中,这是不可能的,因为您将 User
对象与字符串混合,因此会出现该错误。最简单的解决方案是删除所有这些字符串,并确保“用户”节点下只有 User
个对象。代码看起来不错。
看,所有这些子项都存在于“用户”节点下。