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

从firebase实时数据库读取数据

娄森
2023-03-14

我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

private void showData(DataSnapshot dataSnapshot) {
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        Food uInfo = new Food();
        uInfo.setName(ds.child("products").getValue(Food.class).getName()); 
        uInfo.setIngredients(ds.child("products").getValue(Food.class).getIngredients()); 
        //display all the information
        Log.d(TAG, "showData: name: " + uInfo.getName());
        Log.d(TAG, "showData: ingredients: " + uInfo.getIngredients());

        ArrayList<String> array  = new ArrayList<>();
        array.add(uInfo.getName());
        array.add(uInfo.getIngredients());
        [ArrayAdapter adapter = new][1] ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        mListView.setAdapter(adapter);
    }
}

共有3个答案

柯鸿振
2023-03-14

Kotlin溶液:

class products {
        lateinit var productsDataModel: Products_data_model
        lateinit var productList:ArrayList<Products_data_model>
        val firebasereference=FirebaseDatabase.getInstance().reference.child("foodnutrientstest").child("products")
        .addListenerForSingleValueEvent(object : ValueEventListener {

            override fun onCancelled(p0: DatabaseError) {

            }

            override fun onDataChange(p0: DataSnapshot) {

                for(data in p0.children)
                {
                    val ndb=p0.child("NDB_Number").getValue().toString()
                    val ingredient=p0.child("ingreidents_english").getValue().toString()
                    val long_name=p0.child("long_name").getValue().toString()
                    productsDataModel=Products_data_model(ndb,ingredient,long_name)
                    productList.add(productsDataModel)

                }
                display(productList)
            }
        })



        private fun display(productList: java.util.ArrayList<Products_data_model>) //here you can get all data
    {
                for(i in 0 until productList.size)
                {
                    Log.d("ndb_name",productList[i].name)
                    Log.d("ingredient name",productList[i].ingredient)
                    Log.d("long name",productList[i].long_name)
                }
            }

        }

product_data_model.kt

    class Products_data_model {
        var name:String
        var ingredient:String
        var long_name:String

        constructor(name:String,ingredient:String,long_name:String)
        {
            this.name=name
            this.ingredient=ingredient
            this.long_name=long_name
        }
    }
须峰
2023-03-14

要获取该数据,只需uste以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference productsRef = rootRef.child("Products");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String NDB_number = ds.child("NDB_number").getValue(String.class);
            String ingredients_english = ds.child("ingredients_english").getValue(String.class);
            String long_name = ds.child("long_name").getValue(String.class);
            Log.d(TAG, NDB_number + " / " + ingredients_english + " / " + long_name);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
productsRef.addListenerForSingleValueEvent(valueEventListener);

我使用String类来获取您的数据,因为您的字段没有正确命名,数据库中的对象将能够映射到Food对象中。有了这些数据,您现在可以创建您的Food类的新对象,并以我需要的方式使用。

更合适的字段名称是:

private String ndbNumber;
private String ingredientsEnglish;
private String longName;
华季同
2023-03-14

你做错了。

首先,确保模型类Food包含所有要解析的字段。

    public class Food
{
    private String NDB_number;
    private String long_name;
    private String ingredients_english;

    public String getNDB_number() {
        return NDB_number;
    }

    public void setNDB_number(String NDB_number) {
        this.NDB_number = NDB_number;
    }

    public String getLong_name() {
        return long_name;
    }

    public void setLong_name(String long_name) {
        this.long_name = long_name;
    }

    public String getIngredients_english() {
        return ingredients_english;
    }

    public void setIngredients_english(String ingredients_english) {
        this.ingredients_english = ingredients_english;
    }

    public Food(String NDB_number, String long_name, String ingredients_english)
    {
        this.long_name = long_name;
        this.NDB_number = NDB_number;
        this.ingredients_english = ingredients_english;

    }

}

然后您可以按如下方式解析产品

// Get a reference to our Products
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("foodnutrientstest").child("Products");

// Attach a listener to read the products
ref.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot ds : dataSnapshot.getChildren()){
    Food food = ds.getValue(Food.class);
    //display all the information
    Log.d(TAG, "showData: name: " + food.getLong_name());
    Log.d(TAG, "showData: ingredients: " + food.getIngredients_english());

    }
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    System.out.println("The read failed: " + databaseError.getCode());
  }
});

干杯:)

 类似资料:
  • 我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题

  • 我试图从Firebase数据库中读取数据,我已经到处阅读和查找,但我已经走到了死胡同。 这就是我所做的一切。 依赖项: 实现'com.google.firebase: Firebase存储: 9.2.1' 实现'com。谷歌。firebase:firebase数据库:9.2。1' 实现'com。谷歌。firebase:firebase授权:9.2。1' 实现'com。谷歌。火基:火基核心:9.2。

  • 我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗? 或 如果我存储如下所示的数据

  • 因此,我尝试拍摄数据库的快照,并添加带有子项的数组字符串中的项。 我的set和get java文件如下所示 但是,当我的程序到达dataQuery方法并尝试获取和设置名称和成分时,它会崩溃。有人能解释一下我做错了什么,以及是否有更好的方法来使用数据库快照来做到这一点吗? 进程:in.tvac.akshayejh.firebasesearch,PID:24798java.lang.NullPoint

  • 我正在使用Flutter,我想从我的实时数据库Firebase中检索一些数据。我的实时数据库Firebase中存储了以下数据: 如何从中获取每一条信息?例如,我只想得到“Tom”这个名字?

  • Firebase实时数据库似乎会在添加或删除新项目等时通知我。这很好,但如何获取之前通知我的所有现有项目? 例如,假设我的应用程序列出了数据库中的项目。我第一次启动了我的应用程序。然后创建了“项目1”和“项目2”。Firebase通知我“项目1”和“项目2”,因此我将它们添加到我的应用程序列表中。 现在,我的应用程序已关闭并重新启动。如果创建了新项目“项目3”,我会收到通知,但如何再次检索“项目1