【问题标题】:How to make heat map wait for firebase data? Android如何让热图等待firebase数据?安卓
【发布时间】:2017-10-09 02:13:39
【问题描述】:

我正在使用 firebase 和 google api 来制作我存储在 Firebase 中的某些坐标的热图。我的问题是,当我制作热图时,来自 Firebase 的数据尚未加载,因此 Content Provider 发送异常,因为我发送的列表中没有内容。如何让热图等到列表已满?我附上代码:

  public void addHeatMap()
{
    List<LatLng> list = null;

    // Get the data: latitude/longitude.

        list = readItems();

    // Create a heat map tile provider, passing it the latlngs 


    mProvider = new HeatmapTileProvider.Builder()
            .data(list)
            .build();
    // Add a tile overlay to the map, using the heat map tile provider.
    mOverlay = gmap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
}


public ArrayList<LatLng> readItems()
{

    mDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // listas.clear();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                Alertas al = postSnapshot.getValue(Alertas.class);
                LatLng latt= new LatLng(al.getLat(),al.getLongi());
                listas.add(latt);
                System.out.println("This are coordinates"+ latt.toString());
                Log.wtf("Message", "This too: "+latt.toString());

            }
            Log.wtf("List is this", listas.toString());


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return listas;

}

【问题讨论】:

    标签: android multithreading google-maps firebase firebase-realtime-database


    【解决方案1】:

    将此代码移至 onDataChange 函数的末尾:

    mProvider = new HeatmapTileProvider.Builder()
                .data(listas)
                .build();
        // Add a tile overlay to the map, using the heat map tile provider.
        mOverlay = gmap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
    

    这样在 Firebase 返回数据之前它不会运行。

    另请注意,我将传递给热图构建器中的 data() 方法的变量更改为“listas”,以便它与用于保存 Firebase 数据的变量匹配。

    最后,您不应该从 readItems() 返回任何值。如您所见,该函数将在 Firebase 返回数据之前完成执行,因此它始终会返回一个未更改的列表。

    【讨论】:

    • 非常感谢!我觉得这是个愚蠢的错误
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多