【问题标题】:Retrieving child value -firebase-检索子值 -firebase-
【发布时间】:2016-10-27 07:56:49
【问题描述】:
System.out.println(ref.child("mostafa_farahat22@yahoo.com").child("_email"));

*我正在尝试获取 child 的值,但我一直获取该值的 URL 当我尝试使用此代码时,如何获取此 URL 的值,但它让我得到了我想要获取 _email 值的 URL。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您从错误的角度看待这个概念。 在使用ref.child("mostafa_farahat22@yahoo.com").child("_email") 时,您只是简单地指向数据库中的特定位置,仅此而已。 如果您想检索该特定位置的数据,请考虑以下两种方式。

    首先,如果您只想检索一次数据,您可以执行以下操作:

     DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
     DatabaseReference mostafa = ref.child("Users").child("mostafa_farahat22@yahoo.com").child("_email");
    
     mostafa.addListenerForSingleValueEvent(new ValueEventListener() {
     @Override
     public void onDataChange(DataSnapshot dataSnapshot) {
        String email = dataSnapshot.getValue(String.class);
        //do what you want with the email 
     }
    
     @Override
     public void onCancelled(DatabaseError databaseError) {
    
     }
     });
    

    或者您可能想实时检索该值并在数据库值更改的同时使用它,所有这些都在同一时间,每当值更改时,您就使用这个:

    mostafa.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String email = dataSnapshot.getValue(String.class);
    
        display.setText(email);
    }
    
    @Override
    public void onCancelled(DatabaseError databaseError) {
    
    }
    });
    

    注意这两种方法的区别。第一个仅用于一次检索,第二个用于在值更改时检索数据。

    请记住,我发布的代码只是模板,可能需​​要使用它们。

    【讨论】:

    • addValueEventListener 设置后是否会被触发一次?
    • @SreekanthKarumanaghat 我不这么认为。当从 Firebase 数据库向其推送数据时应该触发它。
    • @Ramtin 不,我检查过,它在开始时被触发一次。
    【解决方案2】:

    使用ref.child("mostafa_farahat22@yahoo.com").child("_email"),您只是设置对对象的引用。看看java firebase documentation to retrieve data

    要获取数据,您需要设置一个侦听器以供参考

    ref.child("mostafa_farahat22@yahoo.com").child("_email").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            // data available in snapshot.value()
        }
        @Override
        public void onCancelled(FirebaseError firebaseError) {
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多