2017-03-09 59 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 ' –