2017-03-09 3 views
0

私は以下のようにデータを取得しています。データの「ブロック」ごとに、設定したGoogleマップにマーカーを追加する必要があります。それで、 'lat'、 'lng'などをonMapReadyメソッドに送ることは可能ですか?onMapReadyに引数を送信Google Maps API Android

//the List to store the retrieved data 
static List<infoToStore> info = new ArrayList<>(); 

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot advertiser : dataSnapshot.getChildren()) { 
     final String catString = advertiser.child("cat").getValue(String.class); 
     final String URLString = advertiser.child("downloadURL").getValue(String.class); 
     final String keyString = advertiser.child("key").getValue(String.class); 
     final String lat = advertiser.child("latitude").getValue(String.class); 
     final String lng = advertiser.child("longitude").getValue(String.class); 
     final String descString = advertiser.child("serviceDesc").getValue(String.class); 
     final String nameString = advertiser.child("serviceName").getValue(String.class); 
     //populating the List 
     info.add(new infoToStore(catString, URLString, keyString, lat, lng, descString, nameString)); 
    } 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-20.285889,57.584607) , 10.0f)); 
    for (infoToStore details: info){ 
     marker = mMap.addMarker(new MarkerOptions() 
       .position(new LatLng(getLat(), getLng()) 
       .title(getName()) 
       .snippet(getDesc()))); 
    } 
} 

クラスinfoToStore

public class infoToStore { 
String cat; 
String url; 
String key; 
String lat; 
String lng; 
String desc; 
String name; 

public infoToStore(String cat, String url, String key, String lat, String lng, String desc, String name) { 
    this.cat = cat; 
    this.url = url; 
    this.key = key; 
    this.lat = lat; 
    this.lng = lng; 
    this.desc = desc; 
    this.name = name; 
} 

public String getCat() { 
    return this.cat; 
} 

public String getUrl() { 
    return this.url; 
} 

public String getKey() { 
    return this.key; 
} 

public String getLat() { 
    return this.lat; 
} 

public String getLng() { 
    return this.lng; 
} 

public String getDesc() { 
    return this.desc; 
} 

public String getName() { 
    return this.name; 
} 
} 
+1

マップがロードされた後に 'onDataChange'が呼び出された場合、' if(mMap!= null) 'をチェックしてから' onDataChange'から直接マーカーを追加することができます。 –

答えて

1

あなたのクラスのList<LatLng>を作成し、onMapReadyに続いてonDataChange

に乗った座標を使用して、それを移入、あなたはそのリストを反復処理し、各ポイントを追加地図へ

LatLng以上のものが必要な場合は、名前を表示するには、 onDataChangeにあなたのための内部

public class InfoToStore { 
    private LatLng latLng; 
    private String name; 

    InfoToStore(LatLng latLng, String name){ 
     this.latLng = latLng; 
     this.name = name; 
    } 

    public LatLng getLatLng(){ 
      return this.latLng; 
    } 

    public String getName(){ 
      return this.name; 
    } 
} 

リストを初期化した後、次の手順を実行します:あなたはこのように、保存したいすべての礼儀を持つクラスをeate

listOfPoints.add(new InfoToStore(latLng, nameString)) 

は、それからちょうどfor(InfoToStore info: listOfPoints)を使用してonMapReady内反復あなたが持っている情報でinfoあなたはそれぞれの点を追加します

+0

これはまさに私が考えていたことですが、このリストの各インデックスはすべて7つの変数を含む必要があります。私は2D arraylistについて考えていましたが、実装方法を混乱させてしまいました。 – jo12345678

+0

これは、例で行ったように、より多くの情報を必要とするすべての情報を含むクラスを作成する理由です。 String descStringのような変数と必要なものを追加してください。 次に内容を読むと、この新しいオブジェクトがあなたの情報で作成され、新しいリストに追加されます その後、リストを反復すると、すべての情報が得られますすべてのListエントリにその新しいクラスのアイテムがあるので、 –

+0

特定のスナップショットを検索する必要がある場合は、例えばkeyStringを使用し、Listの代わりに 'HashMap 'を使用します。 –