Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何制作热图等firebase数据?安卓_Android_Multithreading_Google Maps_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何制作热图等firebase数据?安卓

Android 如何制作热图等firebase数据?安卓,android,multithreading,google-maps,firebase,firebase-realtime-database,Android,Multithreading,Google Maps,Firebase,Firebase Realtime Database,我正在使用firebase和GoogleAPI制作我存储在firebase中的特定坐标的热图。我的问题是,当我制作热图时,Firebase的数据尚未加载,因此内容提供商发送了一个异常,因为我发送的列表中没有任何内容。如何使热图等待列表已满?我附上代码: public void addHeatMap() { List<LatLng> list = null; // Get the data: latitude/longitude. list =

我正在使用firebase和GoogleAPI制作我存储在firebase中的特定坐标的热图。我的问题是,当我制作热图时,Firebase的数据尚未加载,因此内容提供商发送了一个异常,因为我发送的列表中没有任何内容。如何使热图等待列表已满?我附上代码:

  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;

}

将此代码移到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返回数据之前,它不会运行

还请注意,我将传递给heatmap builder中的data方法的变量更改为listas,以便它与用于保存Firebase数据的变量相匹配


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

非常感谢!这是一个愚蠢的错误,我感到很愚蠢