2017-04-07 1 views
0

firebase에서 특정 값을 가져와야하는 앱에서 작업 중입니다. 이 경우 "uid"가 현재 사용자 ID와 동일한 "점수"를 가져와야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까?firebase에서 특정 값을 가져 오는 방법

도움 주셔서 감사합니다.

enter image description here

+0

** Leaders-> key-> data ** 대신 ** Leaders-> user id-> key-> data **를 입력하면 원하는 사용자의 데이터를 간단히 가져올 수 있습니다. – AlwaysConfused

+0

몇 가지 샘플 코드? 그게 큰 도움이 될 것입니다 – MariusBrave

+0

아주 간단합니다. firebase 문서 [여기] (https://firebase.google.com/docs/database/android/read-and-write)를 따라하면됩니다. 내가 올바른 데이터베이스를 가지고 있는지 확인하기 전에 앞서 언급 한 – AlwaysConfused

답변

1

Firebase은 항상 전체 노드를 반환합니다. 따라서 사용자의 점수 만 반환 할 수는 없습니다. 하지만 당신은 중포 기지 쿼리를 사용하여 점수와 사용자 모두 (-K...로 시작하는 것) 아래에있는 일반 노드를 반환 할 수 있습니다 코드가 결과에 snapshot을 통해 루프 것을

DatabaseReference leadersRef = FirebaseDatabase.getInstance().getReference("Leaders"); 
Query query = leadersRef.orderByChild("uID").equalTo("vUdnKx..."); 
query.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     for (DataSnapshot child: snapshot.getChildren()) { 
      System.out.println(child.getKey()+": "+child.child("Score").getValue(Long.class)); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "onCancelled", databaseError.toException()); 
     // ... 
    } 
}) 

참고. 이는 쿼리에 잠재적으로 여러 결과가 있기 때문입니다. 따라서 스냅 샷에는 해당 결과 목록이 포함됩니다. 단일 결과 만있는 경우에도 스냅 샷에는 하나의 결과 목록이 포함됩니다.

자세한 내용은 Firebase documentation on handling listssorting and filtering data을 참조하십시오.

+0

고마워요. 원하는 결과를 얻었습니다 – MariusBrave

+0

여러 결과에 대해 각 사용자는 하나의 리더 "자식"만 갖게되므로 큰 문제가 발생합니다 – MariusBrave

0

JSON Database에 beeing, 중포 기지는 WHERE 절을 제공하지 않습니다. 이를 달성하기 위해 10_vUdnKxCSRegqruSAi1Ncz5HWPO 값으로 Score_uID이라는 새 필드를 만들 수 있습니다. 이 새로운 fied가 있으면 "uid"가 현재 사용자 ID와 같은 "점수"가있는 값만 선택할 수 있습니다. 이것은 Firebase 내의 일반적인 관행입니다. 희망이 도움이됩니다.

관련 문제