我使用列表视图从数据库中的tlocation节点显示教师,该教师与学生选择的主题相同。现在我在检索数据时遇到了问题,它给了我同一主题的2个用户坐标,但显示的名称相同。
这是我的代码
scref = db.getReference("users");
tref = db.getReference("tlocation");
sref = db.getReference("slocation");
ul.clear();
scref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ps = dataSnapshot.child(un).child("position").getValue().toString();
if (ps.equalsIgnoreCase("student")){
Query q = tref.orderByChild("subject").equalTo(ssubject);
q.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot u: dataSnapshot.getChildren()) {
susername = u.getKey();
tref.child(susername).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
sula = dataSnapshot.child("latitude").getValue().toString();
sulo = dataSnapshot.child("longitude").getValue().toString();
Location cl1 = new Location("");
lat1 = Float.parseFloat(la);
lon1 = Float.parseFloat(lo);
cl1.setLatitude(lat1);
cl1.setLongitude(lon1);
Location cl2 = new Location("");
lat2 = Float.parseFloat(sula);
lon2 = Float.parseFloat(sulo);
cl2.setLatitude(lat2);
cl2.setLongitude(lon2);
float distance = cl1.distanceTo(cl2);
int i = 0;
ul.add(new UserLocationData(i++, susername, String.valueOf(distance)));
sla = new searchList(getApplicationContext(), ul);
searchlist.setAdapter(sla);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}else if (ps.equalsIgnoreCase("tutor")){
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});// end of scref
所以请就这个问题向我提出建议。谢谢。
答案 0 :(得分:0)
有时它会发生。 addValueEventListener获取两次调用。如果你不想重复值,你可以清除addValueEventListener方法中的ArrayList值。这样你就不会得到重复的价值。如果你对同一个ArrayList有多个addValueEventListener,你也可以设置一个if条件。