【问题标题】:How to get object in jsonarray firebase android?如何在jsonarray firebase android中获取对象?
【发布时间】:2017-12-06 04:27:00
【问题描述】:

构建 Firebase 数据

DetailItemOrderSetGet

我想获取 order_detail 中的所有数据或 order_detail 中的数据之一,例如 detail_item_id。我总是因为order_detail而关闭错误强制,但是如何为此进行循环或如何获取数组对象之一?我只能获取像 order_customer_name 或 order_date 这样的级别的数据。这是我的代码。谢谢

mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            processOrderList.clear();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                    DetailitemOrderSetGet orderDetail = postSnapshot.child("order_detail").getValue(DetailitemOrderSetGet.class);
                        processOrderList.add(postSnapshot.getValue(OrderHistorySetGet.class));

                }
            processAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

【问题讨论】:

  • 请分享你的班级DetailitemOrderSetGet 代码

标签: android json firebase firebase-realtime-database


【解决方案1】:

您无需使用JSONArray 即可从 Firebase 数据库中获取数据。您可以使用 getChildren() 方法迭代 DataSnapshot 对象。假设Transaction 节点是您的Firebase 数据库根的直接子节点,并且您将detail_item_id 存储为int,要从order_detail 节点下的所有子节点中获取detail_item_id 的值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference orderDetailRef = rootRef.child("Transaction").child("4").child("order_detail");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            int detail_item_id = ds.child("detail_item_id").getValue(Integer.class);
            Log.d("TAG", detail_item_id);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
orderDetailRef.addListenerForSingleValueEvent(eventListener);

【讨论】:

  • 感谢您的帮助。但我认为这仅用于从 child = 4 的交易中获取数据订单详细信息。其他孩子呢?
  • 好的,我明白你的意思。但我想如果我使用你的代码。我无法获取根目录下的数据。但我在这个链接firebase nested get data 中得到了答案。总的来说,非常感谢亚历克斯
  • 不客气。你觉得我的回答对你有帮助吗?
【解决方案2】:

嗯,我不知道你类 DetailitemOrderSetGet 的 Setter getter 是什么。但我会谈谈它的一般模式。不要将自己与 Json 对象和 Json Array 混淆。此 Firebase 数据返回采用 Json 格式,执行起来非常简单且快速。

我将使用您的 Json 返回来讨论它的一般模式。

我能看到的第一件事是您返回的 Json 数组,即 Transactions

首先获取并存储它。例如看下面

JSONArray transactionsArray = myFirebaseReturnOBJECT.get("Transactions");

现在您已经在 transactionsArray 中获得了数组。现在您需要遍历它以获取所需的数据。

现在第二步是获取另一个也是 JSONArray 的数据段,因此我们必须执行相同的过程,但在 for 循环中,因为我们有 TransactionsArray。

for (int i = 0; i<transactionsArray.length();i++){
            JSONArray orderDetailsArray = jsonObject.getJSONArray("order_details");

            for (int j = 0; j <orderDetailsArray.length() ; j++) {
                JSONObject order_detail_OBJ = orderDetailsArray.getJSONObject(j);
                String detail_item_id  = order_detail_OBJ.getString("detail_item_id");
            }

        }

你可以看到我已经成功完成了 2 个 for 循环,因为有 2 个 jsonArrays。所以在第 2 步中使用了 for 循环并在索引“j”处获得了 JsonObject,并且从那个 JsonObject 即 order_detail_OBJ 我已经成功获得了我想要的字段,即 detail_item_id

我希望这将帮助您获得所需的内容。我只是将其作为示例,可能存在一些类型错误。

【讨论】:

  • 对不起,我还是不明白你是如何将交易从firebase声明到jsonArray的。
  • 现在的困惑是什么
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 2016-07-10
  • 2016-09-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多