Java 如何将Firebase数据库中的数据正确地放入我的RecyclerView?
我正在Android Studio中创建一个应用程序,它连接到Firebase实时数据库。在数据库中,我具有以下结构: 第一件事:我更喜欢这样的结构: 用户->电子邮件->{23,13,4,…,5}但是我发现使用Firebase我必须有一个对键值,所以我不能得到这种结构。我说的对吗 无论如何。。我创建了这样一个类: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
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