2017-03-09 81 views
0

我正在檢索數據,如下所示。對於每個「塊」數據,我需要在我設置的Google Map上添加一個標記。那麼是否可以將'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>,並使用你onDataChange

瞭然後在onMapReady座標填充它,你遍歷該列表並添加每個點在地圖

如果你需要比經緯度多,顯示例如姓名,你應該CR eate一類你要保存的禮節,像這樣:

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

裏面是您在onDataChange做到以下幾點,初始化列表後:

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

然後,只需使用for(InfoToStore info: listOfPoints)迭代裏面onMapReady並加上你在info的信息,你可以添加每個點

+0

這正是我想到的,但是這個列表中的每個索引都必須包含所有7個變量。我在想一個2D數組列表,但我對如何實現它感到困惑 – jo12345678

+0

這就是爲什麼你需要創建一個包含所有需要的信息的類,就像我在示例中所做的那樣,但有更多的信息。只需添加更多的變量,如String descString和其他需要的變量。不要忘了將它們添加到構造函數中 然後,當您閱讀內容時,將使用您的信息創建此新對象並添加到新列表 然後,當您迭代列表時,您將所有信息所需要的,因爲如果你需要搜索特定快照的所有列表項將有新的類 –

+0

一個項目,例如使用KeyString中,然後代替列表中使用'的HashMap ' –