当前位置: 首页 > 知识库问答 >
问题:

从Firebase数据库中存储的另一个对象检索对象列表

姜建德
2023-03-14
public class Recepta {
private String nom;
private List<Ingredient> ingredients;
private List<String> pasos;

public Recepta() {
}

public Recepta(String nom,List<Ingredient> ingredients, List<String> pasos) {
    this.nom = nom;
    this.ingredients = ingredients;
    this.pasos = pasos;
}
//Getter and setters
}
public class Ingredient {
private String nom;
private String quantitat;

public Ingredient(){
}

public Ingredient(String nom,String quantitat){
    this.nom = nom;
    this.quantitat = quantitat;

}
//Getter and setters
}

和我的数据库的结构:

3ER2U0QSDTMHRdKA0eO231UCQeY2
8eJaHRU9f5ZrVogqhx0Hj1iFcgG2
     -jdhd
        -ingredients
            -0
              -nom: "bdhd"
              -quantitat: "b,bzh"
        -nom:"jdhd"
        -pasos
            -0: "djdjjd"
     -jdjd
     -jdjdvshs
AfcGeBzvdLRq19J3kRk3CVg30np2
fk39ClAVaQNFQCONU9Agp0KfUUf1addclose

正如您所看到的,“pasos”是一个字符串列表,而“成分”是一个成分列表。

我无法找到的是如何从数据库中检索这些列表,因为我想获得一个接收列表。我尝试了很多事情,但都是错误的,因为它没有检索到任何列表。

final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    final DatabaseReference listReference = FirebaseDatabase.getInstance().getReference(user.getUid());
    listReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(final DataSnapshot listSnapshot: dataSnapshot.getChildren()){
                receptas.add(listSnapshot.getValue(Recepta.class));
            }
            listReceptaAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我还知道FB DB可以使用HashMaps,但我不知道如何检索它们或从hashmap传递到列表,而不必遍历hashmap每个位置

那我该怎么办呢?提前谢谢你

共有1个答案

关翰
2023-03-14

我认为下面的示例将有助于在firebase数据库中将两个数据集成到一个列表中

public static ArrayList<MuteModel> muteModelList;

public void updateMuteListServer(){



    DatabaseReference frndMuteRef = FirebaseDatabase.getInstance().getReference().child("users/" + getFirebaseUser().getUid().trim() + "/friendlists");
    Query queryRef = frndMuteRef.orderByChild(MUTE).equalTo(YES);
    queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            GenericTypeIndicator<HashMap<String,MuteModel>> t=  new GenericTypeIndicator<HashMap<String,MuteModel>>() { };

            HashMap<String,MuteModel> hashMap= (HashMap<String,MuteModel>)dataSnapshot.getValue(t);

            if(hashMap!=null) {
               muteModelList = new ArrayList<MuteModel>(hashMap.values());
                for (MuteModel muteModel: muteModelList){
                    muteModel.setIsgroup(NO);
                }

            }else{
               muteModelList = new ArrayList<MuteModel>();


            }

            findGroupMuteList();

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

private void findGroupMuteList() {

    DatabaseReference groupMuteRef = FirebaseDatabase.getInstance().getReference().child("users/" + getFirebaseUser().getUid().trim() + "/"+GROUPS);
    Query queryRef = groupMuteRef.orderByChild(MUTE).equalTo(YES);
    queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            GenericTypeIndicator<HashMap<String,MuteModel>> t=  new GenericTypeIndicator<HashMap<String,MuteModel>>() { };

            HashMap<String,MuteModel> hashMap= (HashMap<String,MuteModel>)dataSnapshot.getValue(t);

            ArrayList<MuteModel> properties;
            if(hashMap!=null) {
                properties = new ArrayList<MuteModel>(hashMap.values());

                for (MuteModel muteModel:properties){
                    muteModel.setIsgroup(YES);
                }


            }else{
               properties = new ArrayList<MuteModel>();


            }

            MyChat.muteModelList.addAll(properties);

            Gson gson = new Gson();
            String strMuteList = gson.toJson(MyChat.muteModelList);

            editSharedPref(MUTELIST,strMuteList);


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });




}

在您的例子中,我认为成分的通用适配器如下所示

GenericTypeIndicator<ArrayList<Ingredients>>

在PASO的情况下,您可以执行如下操作&

GenericTypeIndicator<ArrayList<Strings>>
 类似资料:
  • 问题内容: 我正在尝试以android应用程序的形式创建一个小型课程聚合程序。 我的课程全部存储在Firebase实时数据库中,该数据库可从firebase控制台查看,并且一切正常。 问题是我已经编写了一个Java方法来连接到DB,从DB检索数据,将数据转换为Custom Java对象,将其附加到另一个Custom Java对象,然后将该对象保存到ArrayList中。 与数据库的连接已成功建立,

  • 我有两个对象列表,它们在两个列表中都有重复名称。我需要从清单2中删除清单1中的所有重复值。 下面是一个场景,类有名称变量,用这个变量需要检查清单1中的重复值并需要删除。 //这是具有3个对象的第一个列表 清单1大小为1 请建议我在Java8与流。

  • 问题内容: 大家好,我想在html页面上显示数据库表的全部内容。我试图先从数据库中获取记录并存储在其中,但是当我在html页面上返回数组列表时,它仅重复显示最后一条记录作为数据库表的计数。这是下面的代码: 问题答案: 尝试以下代码 这是我的模特班 这是我的查看方法

  • 这是我的假火基地结构。 更新新代码段: 我也尝试过。现在它甚至不会触发嵌套的。我现在没有任何结果。所有的引用都是正确的。查询正确。我不明白为什么snippet不检索数据。现在完全混乱了。