下面的代码通过forEach循环使我在Firebase中的所有孩子都变得如此
final Query query = mDataBaseReference_info_channels.child(getUserDetails().getUserId()).child("channels");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
DebugLog.d("\n test: " + dsp.toString());
}
}
但是我想使用for循环并获取最后一个位置并再次触发查询。我不想这样使用下面的代码:
i=0;
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
i++;
if(i==datasnapt.getchildren)
{
//fire a api
}
}
任何人都有解决方案,然后请给我答案。
答案 0 :(得分:1)
因为dataSnapshot.getChildren()
返回Iterable<DataSnapshot>
。使用Iterator从集合中获取最后一个项目:
DataSnapshot lastDataSnapshot = null;
Iterable<DataSnapshot> iterable= dataSnapshot.getChildren();
for (Iterator iterator = iterable.iterator(); iterator.hasNext(); ) {
lastDataSnapshot = iterator.next();
}
lastDataSnapshot
是DataSnapshot的最后一项。用它来触发下一个api。
答案 1 :(得分:1)
如果只想从数据库中获取 Channel 节点的最后一行,请尝试以下代码。
DatabaseReference databaseReference = Firebase.getInstance().getReference();
databaseReference.child(getUserDetails().getUserId()).child("channels").orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// here dataSnapshot is the value of last position.
@Override
public void onCancelled(DatabaseError databaseError) {
//Handle possible errors.
}
});
答案 2 :(得分:0)
要从DataSnapshot
对象获得最后一个位置,您可以使用以下代码行计算子代数:
long count = dataSnapshot.getChildrenCount();
您的最后一个项目将在以下位置:
int lastPosition = (int) count - 1;
如果要使用for循环,请使用以下代码:
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<YourClass> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
YourClass yourClass = ds.getValue(YourClass.class);
list.add(yourClass);
}
YourClass lastItem = list.get(list.size() - 1);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(valueEventListener);
通过这种方式,您可以从上一个位置或任何其他位置获得该物品。我以YourClass
为例。您的YourClass
可以是String类或任何其他模型类。