Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Firebase数据库中的数据正确地放入我的RecyclerView?_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

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

Java 如何将Firebase数据库中的数据正确地放入我的RecyclerView?,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在Android Studio中创建一个应用程序,它连接到Firebase实时数据库。在数据库中,我具有以下结构: 第一件事:我更喜欢这样的结构: 用户->电子邮件->{23,13,4,…,5}但是我发现使用Firebase我必须有一个对键值,所以我不能得到这种结构。我说的对吗 无论如何。。我创建了这样一个类: public class ItemModel { private int itemImg; private int deleteFav; private

我正在Android Studio中创建一个应用程序,它连接到Firebase实时数据库。在数据库中,我具有以下结构:

第一件事:我更喜欢这样的结构:

用户->电子邮件->{23,13,4,…,5}但是我发现使用Firebase我必须有一个对键值,所以我不能得到这种结构。我说的对吗

无论如何。。我创建了这样一个类:

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(".", ",");
    }
}
公共类FirebaseDatabaseHelper{
私有FirebaseDatabase FirebaseDatabase;
私有数据库参考数据库参考文件;
private List FavoriteList=新的ArrayList();
私人消防队;
//为了链接我们的流程,我们需要创建接口
公共接口数据状态{
void DataIsLoaded(列出收藏夹、列表键);
}
公共FirebaseDatabaseHelper(){
mAuth=FirebaseAuth.getInstance();
firebaseDatabase=firebaseDatabase.getInstance();
databaseReferenceFavorites=firebaseDatabase.getReference(“用户”);
}
public void readFavoriteLines(最终数据状态数据状态){
databaseReferenceFavorites.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){//asincrono
favoriteList.clear();
列表键=新的ArrayList();
对于(DataSnapshot键节点:DataSnapshot.getChildren()){
添加(keyNode.getKey());
ItemModel Favorite=keyNode.getValue(ItemModel.class);
收藏夹列表。添加(收藏夹);
}
dataStatus.DataIsLoaded(收藏夹列表、键);
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
静态字符串编码用户电子邮件(字符串用户电子邮件){
返回userEmail.replace(“.”,“,”);
}
}
当我运行时,从这个类中我得到错误“没有设置器/字段”test@email,com可在com.example.x.y.ItemModel类中找到。我在这里看到其他人有这个错误,但不明白我的代码的哪一部分是不正确的。我尝试添加setter,并将数据库中“v1”的名称更改为“itemLine”,但仍然有相同的错误

问题是,当我运行时,我的项实际上出现在UI中,但它缺少一个数据,即itemLine。行必须是img1-itemLine-img2,但它只显示img1-nothing-img2。我只需要取每个的值test@email,com(itemLine)并将此值(例如23)放入my RecyclerView项中。该行应如下所示:
这不会显示任何内容,因为您试图从用户那里获得价值,而不是test@email,com

试试这个

而不是这个

databaseReferenceFavorites =  firebaseDatabase.getReference("users");
    
这将获取您的数据 创建对该位置的数据库引用

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(".", ",");
    }
}
公共FirebaseDatabaseHelper(){ mAuth=FirebaseAuth.getInstance(); firebaseDatabase=firebaseDatabase.getInstance(); DatabaseReference databaseReferenceFavorites= firebaseDatabase.getReference(“用户”); DatabaseReference databaseReferenceitemline= databaseReferenceFavorites.child(“test@gmail,com) } public void readFavoriteLines(最终数据状态数据状态){ databaseReferenceitemline.addValueEventListener(新的ValueEventListener(){ @凌驾 public void onDataChange(@NonNull DataSnapshot DataSnapshot){//asincrono favoriteList.clear(); 列表键=新的ArrayList(); 对于(DataSnapshot键节点:DataSnapshot.getChildren()){ 添加(keyNode.getKey()); ItemModel Favorite=keyNode.getValue(ItemModel.class); 收藏夹列表。添加(收藏夹); } dataStatus.DataIsLoaded(收藏夹列表、键); } @凌驾 已取消公共void(@NonNull DatabaseError){ } }); } 静态字符串编码用户电子邮件(字符串用户电子邮件){ 返回userEmail.replace(“.”,“,”); } } 在这个片段中

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