带有recyclerview的双打印地理查询
Posted
技术标签:
【中文标题】带有recyclerview的双打印地理查询【英文标题】:Double printed geoquery with recyclerview 【发布时间】:2019-09-01 13:31:01 【问题描述】:我尝试使用 geoquery 填充 recyclerview,并将 geoquery 的半径设置为 0.1,因此我只能从 firebase 获得 1 个项目(并且它正在工作)。
但是,为什么所有 ID 都是根据我在 firebase 中找到的项目打印和循环的。
View my Firebase JSON
View the end result in emulator
reference = FirebaseDatabase.getInstance().getReference("Users").child("Location");
GeoFire geoFire = new GeoFire(reference);
double my_lat = -6.2629133;
double my_lon = 106.8355483;
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(my_lat, my_lon), 0.1);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener()
@Override
public void onKeyEntered(String key, GeoLocation location)
Query locationDataQuery = FirebaseDatabase.getInstance().getReference("Users").child("Cleaner");
locationDataQuery.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
if(dataSnapshot.exists())
for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
Sitter p = dataSnapshot1.getValue(Sitter.class);
list.add(p);
sitterAdapter = new SitterAdapter(MainActivity.this, list);
sitter_place.setAdapter(sitterAdapter);
Toast.makeText(getApplicationContext(), "Data Ada", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(), "Data Kosong", Toast.LENGTH_SHORT).show();
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
根据我为地理查询设置的半径,我希望仅输出我在 firebase 中找到的 1 个项目。
【问题讨论】:
Difference between addValueEventListener() and addListenerForSingleValueEvent() of firebase的可能重复 我尝试用 addListenerForSingleValueEvent 替换它,但仍然没有什么不同。无论如何,谢谢你的帮助。 这两个事件可能仍然相互干扰;我曾经解释过here。 【参考方案1】:好的,我通过下面的方法解决了。现在仍在弄清楚如何将其填充到 RecyclerView(因为我尝试过它总是 Object Can't String yadayadayada):
Query locationDataQuery = FirebaseDatabase.getInstance().getReference("Users").child("Cleaner").child(key).child("info");
locationDataQuery.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
if(dataSnapshot.exists())
Log.w("Name", dataSnapshot.child("cleaner_name").getValue(String.class));
Log.w("ID", dataSnapshot.child("cleaner_id").getValue(String.class));
// for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
// Sitter p = dataSnapshot1.getValue(Sitter.class);
// list.add(p);
//
sitterAdapter = new SitterAdapter(MainActivity.this, list);
sitter_place.setAdapter(sitterAdapter);
Toast.makeText(getApplicationContext(), "Data Ada", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(), "Data Kosong", Toast.LENGTH_SHORT).show();
【讨论】:
以上是关于带有recyclerview的双打印地理查询的主要内容,如果未能解决你的问题,请参考以下文章
如何解决这个rec ylerview问题?我的代码中有任何错误吗?在应用程序中唱歌后运行时崩溃