在Android中使用Firebase数据库时,Firebase不直接支持序列化集合。但是,你可以通过以下方法解决这个问题:
public class User {
private String username;
private String email;
public User() {
// Default constructor required for calls to DataSnapshot.getValue(User.class)
}
public User(String username, String email) {
this.username = username;
this.email = email;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
}
FirebaseFirestore db = FirebaseFirestore.getInstance();
// 创建一个Map对象
Map users = new HashMap<>();
// 添加用户到Map中
users.put("user1", new User("John Doe", "john@example.com"));
users.put("user2", new User("Jane Smith", "jane@example.com"));
// 将Map对象存储到Firebase数据库中
db.collection("users").document("userCollection").set(users)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "Users collection successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing users collection", e);
}
});
getData()方法获取集合数据。然后,你可以通过遍历集合的方式获取每个数据模型对象。db.collection("users").document("userCollection").get()
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists()) {
Map data = documentSnapshot.getData();
for (Map.Entry entry : data.entrySet()) {
String userId = entry.getKey();
Map userData = (Map) entry.getValue();
String username = (String) userData.get("username");
String email = (String) userData.get("email");
User user = new User(username, email);
// 使用user对象进行后续处理
}
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error reading users collection", e);
}
});
通过这种方式,你可以存储和检索集合数据,而无需直接序列化集合对象。