【发布时间】:2020-06-21 19:49:26
【问题描述】:
我正在 Android Studio 中创建一个连接到 Firebase 实时数据库的应用。在数据库中,我有以下结构:
第一件事:我更喜欢这样的结构:
users -> email -> {23, 13, 4, .., 5} 但我发现使用 Firebase 我必须有一对 key - value 所以我无法获得这种结构。我说的对吗?!
无论如何.. 我创建了一个这样的类:
public class ItemModel {
private int itemImg;
private int deleteFav;
private String itemLine;
public ItemModel(){}
public ItemModel(String itemLine) {
this.itemLine = itemLine;
}
public ItemModel(int itemImg, String itemLine, int deleteFav) {
this.itemImg = itemImg;
this.deleteFav = deleteFav;
this.itemLine = itemLine;
}
public int getItemImg() {
return itemImg;
}
public int getDeleteFav() {
return deleteFav;
}
public String getItemLine() {
return itemLine;
}
@Override
public String toString() {
return itemLine;
}
}
这是我的 Firebase 数据库助手类:
public class FirebaseDatabaseHelper {
private FirebaseDatabase firebaseDatabase;
private DatabaseReference databaseReferenceFavorites;
private List<ItemModel> favouriteList = new ArrayList<>();
private FirebaseAuth mAuth;
// In order to link our process we need to create interface
public interface DataStatus {
void DataIsLoaded(List<ItemModel> favourites, List<String> keys);
}
public FirebaseDatabaseHelper(){
mAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReferenceFavorites = firebaseDatabase.getReference("users");
}
public void readFavoriteLines(final DataStatus dataStatus){
databaseReferenceFavorites.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) { // asincrono
favouriteList.clear();
List<String> keys = new ArrayList<>();
for (DataSnapshot keyNode : dataSnapshot.getChildren()){
keys.add(keyNode.getKey());
ItemModel favourite = keyNode.getValue(ItemModel.class);
favouriteList.add(favourite);
}
dataStatus.DataIsLoaded(favouriteList, keys);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
static String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}
}
当我运行时,我从这个类中得到错误“No setter/field for test@email,com found on class com.example.x.y.ItemModel”。我在这里读到其他人遇到此错误,但无法理解我的代码的哪一部分不正常。我尝试添加设置器并将数据库中“v1”的名称更改为“itemLine”,但仍然出现相同的错误。
问题是,当我运行时,我的项目实际上出现在 UI 中,但它错过了一个数据,即 itemLine。该行必须是 img1 - itemLine - img2 但它只显示 img1 - 无 - img2。我只需要获取每个 test@email,com (itemLine) 的值并将这个值(例如 23)放在我的 RecyclerView 项目中。该行应如下所示:
【问题讨论】:
标签: java android firebase firebase-realtime-database android-recyclerview