2017-07-08 91 views
1

我已经在我的应用中集成了Google登录功能,并且正在将一些数据推送到包括用户U-id在内的消防基地。我研究了很多并没有获得任何问题我面临,我想获取特定的数据,例如如果用户A登录并推送5数据,然后用户B登录并推送3数据。我想要一个查询,如果用户A再次进入它将得到他的5个数据仅供参考,并非是由用户B.Thanks提前推数据:)如何从Android中的Firebase中获取特定数据

利用这一点,从火力获取所有数据:

databaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot data : dataSnapshot.getChildren()) { 
       FirebaseModel firebasemodel = 
     data.getValue(FirebaseModel.class); 
       firebasemodels.add(firebasemodel); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

我已经尝试了所有的.child。 orderby和.equalTo但did'nt工作

我的结构如下:

My FireBase Structure

+0

您可以广告d此功能通过添加一个user_id并获取基于user_id的数据 – ashish

+0

我正在添加用户id在firebase.the我面临的问题,同时获取该用户数据 –

+0

请检查我的答案希望将帮助你。 – ashish

回答

0

您还需要数据,这是不包含在您的代码块的参考。因此沿线的(这应该是在此之前)的东西:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("notepad-secure/notepad"); 
+0

我在onCreate方法加入这一行 –

0

要从火力取特殊值,试试这个代码

FirebaseDatabase database; 
    database.getReference().child("notepad-secure").orderByChild("id").equalTo(user).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.getValue() != null) { 
       for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { 

        User userdet =childSnapshot.getValue(yourclass.class); 
        String note=userdet.note; 
        //Here you will get the string values what you want to fetch 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

尝试不工作:( –

0

首先,在您的孩子将数据添加为user_id键,看起来象下面这样:

id:"", 
note:"", 
title:"", 
user:"" 
user_id:"{id from which user have you uploaded data}" 

而且比你可以与特定的用户数据可以拨打下面的功能就像 下面注:“USER_ID” = ID从用户中有你上传的数据

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

Query query = reference.child("notepad").orderByChild("id").equalTo("user_id"); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      // dataSnapshot is the "notepad" node with all children with id 
      for (DataSnapshot notepad: dataSnapshot.getChildren()) { 
       // do something with the individual "notepad_data" 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
+0

.equalTo(“USER_ID”);在参数shuold我添加user_id的值? –

+0

增加值后,它不工作:( –

+0

是的,因为我给你一个子节点的例子..或者,如果你可以传递唯一的任何值为特定用户。可能是你的用户密钥可能是唯一的 – ashish

0

首先U必须区分.U必须实施Firebase身份验证,才能获得每个USER的Firebase UID。

String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 

然后在新的节点seperatly存储。

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 

假设您: 即以火力地堡数据库实例和

databaserefernace.child("Data").Child("userID); 
+0

? –

+0

然后检索数据 –

0

当您添加用户数据到火力地堡数据库,则可以使用由FirebaseAuth对象像这样提供的特定uid添加它你的数据库strucure这个样子:Firebase root -> notepad-secure -> notepad,检索数据,您可以使用此代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference notepadRef = rootRef.child("notepad-secure").child("notepad").child(uid); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String id = dataSnapshot.child("id").getValue(String.class); 
     String note = dataSnapshot.child("note").getValue(String.class); 
     String title = dataSnapshot.child("title").getValue(String.class); 
     String user = dataSnapshot.child("user").getValue(String.class); 
     Log.d("TAG", id + "/" + note + "/" + title + "/" + user); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
notepadRef.addListenerForSingleValueEvent(eventListener); 
相关问题