简体   繁体   English

如何将 Firebase 数据库中的正确数据放入我的 RecyclerView?

[英]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在这个片段中

  • databaseReferenceFavorites points to user databaseReferenceFavorites 指向用户
  • databaseReferenceitemline points to test@gmail,com databaseReferenceitemline 指向test@gmail,com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我无法在 recyclerView 上显示来自我的 firebase 实时数据库的数据 - I can't show data from my firebase real-time database on a recyclerView 如何阻止从 Firebase 数据库填充并由 FirebaseRecyclerAdapter 管理的 RecyclerView 重新创建已删除的视图? - How can I stop my RecyclerView, populated from Firebase Database and managed by FirebaseRecyclerAdapter, from recreating deleted views? 如何每秒使用 RecyclerView 刷新 Firebase 数据库数据 - How can I refresh Firebase database data with RecyclerView every seconde 我正在尝试将 firebase 实时数据库中的数据检索到我的 recyclerview 中,但数据显示 null - I am trying to retrieve data from firebase realtime database into my recyclerview but data is showing null 如何在 firebase 数据库中的文本中显示我的数据实时我的代码和我的 XML 在 - How can I show my data in text from firebase database Realtime my code and my XML is in 从 Firebase 实时数据库获取的数据未显示在我的 RecyclerView 中 - Data fetched from Firebase Realtime Database is not displayed in my RecyclerView 从Firebase检索一些数据并将其放在RecyclerView上 - Retrieve some data from Firebase and put it on a RecyclerView 如何从Firebase数据库检索数据以显示标记? - How can I retrieve data from my Firebase Database to display markers? 从Firebase数据库检索对象到我的RecyclerView中 - Retrieving objects from Firebase database into my RecyclerView RecyclerView 未从 firebase 数据库中获取数据 - RecyclerView not fetching data from firebase database
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM