【问题标题】:using for-loop with datasnapshot, can't get the value I want使用带有数据快照的 for 循环,无法获得我想要的值
【发布时间】:2018-12-26 21:43:20
【问题描述】:

我想在图片中获得价值,

 DatabaseReference GetDestination_Order = FirebaseDatabase.getInstance().getReference("results").child(x).child("destination_order");
        GetDestination_Order.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                destination_order.clear();
                for (DataSnapshot Snapshot : dataSnapshot.getChildren()) {
                    int data = Snapshot.getValue(Integer.class);
                    String im_or = String.valueOf(data);
                    destination_order.add(im_or);
                }
                pass_Destination_order(destination_order);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                throw databaseError.toException();
            }
        });

我可以像这样得到destination_order 目的地订单:[81、95、93、96、2] destination_order: [0, 1, 2, 3, 4, 5, 6]

public void pass_Destination_order(final ArrayList<String> destination_order) {

    for (int n = 0; n < destination_order.size(); n++) {

        String x = destination_order.get(n);

        DatabaseReference myRef1 = FirebaseDatabase.getInstance("---firebaseurl---").getReference("travel").child("0").child("result").child(x).child("picture");
        Log.e("url-x", x);
        ValueEventListener valueEventListener = myRef1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                murl="";

                datatest = dataSnapshot.getValue(String.class);
                Log.e("url", String.valueOf(datatest));
                if (count == 0) {
                    murl += datatest;
                    getImages(murl);`enter code here`

                }
                if(count==destination_order.size()-1){
                    count=0;}
                else
                    count++;
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                throw databaseError.toException();
            }
        });
    }

希望得到按[81, 95, 93, 96, 2]排序的图片url ,但是我得到的 myurl 被弄乱了。 为什么第一个 myurl 不属于 81?输出/日志如下。

【问题讨论】:

  • 分享你的完整数据库结构。
  • 请添加您的数据库结构并指明您想要获取的确切值,并请回复@。
  • @AlexMamo 我加了,谢谢!
  • @Raj 我加了,谢谢!
  • 您正在获取目的地号码,但您无法按该顺序获取 myurl。这是你的问题吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

要获取destination_order 节点内的所有数字,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("results").child(x).child("destination_order");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            int number = ds.getValue(Integer.class);
            Log.d("TAG", number + ", ");
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(valueEventListener);

【讨论】:

  • 在“int numberString im_or = String.valueOf(number);destination_order.add(im_or);”下面添加这些代码并添加 pass_Destination_order(destination_order) ?
  • 为什么要这样做?这不是你在寻找这些数字吗?
  • 我要获取图片url
  • 我在你的图片中看不到任何网址,只有数字。能不能说的具体点?
  • 我的意思是我得到了destination_order [81,95,93,92,6]并传入方法来获取url,但是我得到的第一个url不是id=81是93的图片url
猜你喜欢
  • 2012-05-16
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多