2017-07-08 82 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); 
相關問題