2016-09-14 1 views
1

점수 검색 내 중포 기지 내가중포 기지는이의 스크린 샷 (100) 가장 높은

Map<String, String> post1 = new HashMap<String, String>(); 
     post1.put("name",name); 
     post1.put("score",score); 
     myRef.push().setValue(post1); 

을 중포 기지 새로운 노드를 추가하려면이 코드를 사용하고 중포 기지 데이터베이스 에서 가장 높은 100 점을 검색하려고 enter image description here 이것은 내가 (코드가 작동하지만이 최고 100 점수가 검색되지 않음)

Query queryRef = myRef.orderByChild("score").limitToFirst(100); 
     queryRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 
        Score score=postSnapshot.getValue(Score.class); 
        Log.d("test"," values is " + score.getName() + " " + score.getScore()); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
+0

그것은 숫자로 점수를 저장하는 것이 좋습니다 (최근에 어제처럼) 문자열 대신. 자세한 정보는 프랭크의 답변에 대한 의견을 확인하십시오. –

답변

6

중포 기지 쿼리가 작동하지 않습니다 가장 높은 100 점을 검색하기 위해 사용하고있는 코드는 항상 오름차순으로. 그래서 당신은 그 다음 클라이언트 측 당신이 항목을 반대해야하는 대신 처음 100

Query queryRef = myRef.orderByChild("score").limitToLast(100); 

의, 마지막 (100)를 얻을해야합니다.

또는 반전 된 속성을 상품에 넣을 수 있습니다. invertedScore: -99. 그렇게한다면, 그 거꾸로 된 점수로 주문할 수 있고 배열을 뒤집을 필요가 없습니다.

이 시나리오는 이전에 자주 제기되었습니다. 내가보기 엔 당신이 중 일부를 연구하는 것이 좋습니다 :

+0

질문에 문자열이 아니라 숫자가 있기 때문에 이것이 실제로 작동하는지 궁금합니다. "1", "12", "2", "3", "33", "333", "4"와 같이 정렬하지 않습니까? –

+0

강 ... .... 좋은 캐치 안드레. 분명히 나는 ​​사각 지대가있다. 왜냐하면 나는 그들이 숫자로 저장되었는지를 확인했기 때문이다. ** 위의 내용은 점수를 숫자 (또는 제로 패딩 된 문자열) **로 저장하는 경우에만 실제로 작동합니다. –