[英]How can I put correctly data from Firebase database to my RecyclerView?
I'm creating an app in Android Studio, which connects to Firebase realtime database.我正在 Android Studio 中创建一个应用程序,该应用程序连接到 Firebase 实时数据库。 In the database I have the following structure:在数据库中,我具有以下结构:
First thing : I would have preferred a structure like:第一件事:我更喜欢这样的结构:
users -> email -> {23, 13, 4, .., 5} but i found out that with Firebase I must have a pair key - value so I can't get this kind of structure. users -> email -> {23, 13, 4, .., 5} 但我发现使用 Firebase 我必须有一对 key - value 所以我无法获得这种结构。 Am I right?!我对吗?!
Anyways.. I created a class like this:无论如何..我创建了一个 class 像这样:
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;
}
}
And this is my Firebase Database Helper class:这是我的 Firebase 数据库助手 class:
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(".", ",");
}
}
When I run, from this class i get the error " No setter/field for test@email,com found on class com.example.xyItemModel ". When I run, from this class i get the error " No setter/field for test@email,com found on class com.example.xyItemModel ". I read other people having this error here but can't understand which part of my code is not ok.我在这里读到其他人遇到此错误,但无法理解我的代码的哪一部分不正常。 I tried to add setters and to change names of "v1" in database to "itemLine" but still having the same error.我尝试添加设置器并将数据库中“v1”的名称更改为“itemLine”,但仍然出现相同的错误。
The thing is that actually my item appear in the UI when I run but it miss one data, the itemLine.问题是,当我运行时,我的项目实际上出现在 UI 中,但它错过了一个数据 itemLine。 The row must be img1 - itemLine - img2 but it shows only img1 - nothing - img2.该行必须是 img1 - itemLine - img2 但它只显示 img1 - 无 - img2。 I need to take only the value of each test@email,com (itemLine) and put this value (23 for example) in my RecyclerView item.我只需要获取每个 test@email,com (itemLine) 的值并将这个值(例如 23)放在我的 RecyclerView 项目中。 The row should look like this:该行应如下所示:
This will show nothing because you're trying to get value from users not test@email,com这不会显示任何内容,因为您试图从用户那里获取价值,而不是 test@email,com
Try this尝试这个
Instead of this而不是这个
databaseReferenceFavorites = firebaseDatabase.getReference("users");
this should fetch your data Create database reference to the location这应该获取您的数据创建对该位置的数据库引用
public FirebaseDatabaseHelper(){
mAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReferenceFavorites =
firebaseDatabase.getReference("users");
DatabaseReference databaseReferenceitemline =
databaseReferenceFavorites.child("test@gmail,com")
}
public void readFavoriteLines(final DataStatus dataStatus){
databaseReferenceitemline.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(".", ",");
}
}
In this snippet在这个片段中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.