带有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的双打印地理查询的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历带有更新字段条件的游标 [PLSQL]

如何解决这个rec ylerview问题?我的代码中有任何错误吗?在应用程序中唱歌后运行时崩溃

改变方向recyclerview卡大小变化

当 RecyclerView 为空时,CollapsingToolbarLayout 不应折叠

SQL Server 2008 地理空间查询

本地地理名称数据库查询