0

FirebaseとGoogleのAPIを使用して、Firebaseに保存した特定の座標のヒートマップを作成しています。私の問題は、ヒートマップを作成すると、Firebaseのデータがまだロードされていないため、リストにコンテンツを送信していないためにContent Providerが例外を送信するということです。リストがいっぱいになるまでヒートマップを待機させるにはどうすればよいですか?私はコードを添付:Firebaseがデータを返すまで、それは実行されませんその方法をファイヤーベースデータのヒートマップ待機を行うには? Android

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)); 

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; 

} 

答えて

1

は、このコードを取り、あなたのOnDataChangeの関数の最後に移動します。

ヒートマップビルダー内のdata()メソッドに渡される変数を「listas」に変更し、Firebaseデータを保持するために使用される変数と一致するように変更しました。

最後に、readItems()から値を返さないでください。見てきたように、関数はFirebaseがデータを返す前に実行を終了するので、常に変更されていないリストが返されます。

+0

ありがとうございます!私はそれが愚かな間違いだったことを愚かに思う – user3487815

関連する問題