2017-04-10 69 views
0

我找到了运行槽的代码,并返回相应的值。但是我需要返回列表中项目的位置。我应该如何修改代码,以便返回项目的位置(索引)。从Firebase获取物品的位置

谢谢。

//query for sorting by score 
    score = FirebaseDatabase.getInstance().getReference().child("Leaders"); 
    final Query query = score.orderByChild("uID").equalTo(mCurrentUser.getUid()); 

    query.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator(); 

      int length = (int) dataSnapshot.getChildrenCount(); 

      String[] sampleString = new String[length]; 

      while(i < length) { 
       sampleString[i] = iterator.next().getValue().toString(); 
       //Log.d(Integer.toString(i), sampleString[i]); 

       //print the value of current score 
       Toast.makeText(LeaderBoardActivity.this,sampleString[i],Toast.LENGTH_LONG).show(); 
       i++; 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

enter image description here

+0

尝试使用前面的答案中提到的F​​irebaseListAdapter。肯定会工作。 'populateView()'方法具有你需要的确切位置,'位置'。 –

回答

1

我已经编辑根据您的评论的代码。因为你只关心位置和得分...

// you will need to query the database based on scores 
score = FirebaseDatabase.getInstance().getReference().child("Leaders"); 
final Query query = score.orderByChild("Score"); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // get total leaders. Let's say total leader is 5 persons 
     int total = (int) dataSnapshot.getChildrenCount(); 
     // let's say userB is actually 2nd in the list 
     int i = 0; 
     // loop through dataSnapshot 
     for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { 
      String uID = childSnapshot.child("uID").getValue(); 
      if (uID.equals(mCurrentUser.getUid()) { 
       // the list is ascending, when finally reach userB, i = 3 
       int userPlace = total - i; // gives 2 
       int score = childSnapshot.child("Score").getValue(Interger.class); 
       break; 
      } else { 
       i++; 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

请注意,这可能是非常带宽消耗。随着用户越来越多,您需要下载每个查询的所有用户数据。如果你只展示前5名的领导者,这可能会更好。

+0

我试图做的事情基本上是在排行榜上提供的位置。例如,用户A有80个,积分用户B有60个。所以这个位置将像这个用户A第一个用户B第二个等等一样布置。 – MariusBrave

+0

你打算如何从列表中检索值?请列举一个例子。你需要在列表中包含用户名吗? (1)用户A - 80(2)用户B - 60(3)用户C ....“或者你并不关心序列,只想要(用户A) - 80, (用户B) - 60,(用户C)...'括号中的项目是稍后回调列表中的值的“键”。 – tingyik90

+0

我关心序列,这是领导委员会显示用户在哪个位置的主要想法。我并不真的需要显示他的名字...只需要显示分数值和指数值它 – MariusBrave