将参数发送到 onMapReady Google 地图 API Android
Send arguments to onMapReady Google Maps API Android
我正在检索数据,如下所示。对于每个 'blocks' 数据,我需要在我设置的 Google 地图上添加一个标记。那么是否可以将 'lat'、'lng' 等发送到 onMapReady 方法?
//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())));
}
}
class 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;
}
}
在您的 class 上创建一个 List<LatLng>
并使用您在 onDataChange
上获得的坐标填充它
然后在 onMapReady
上迭代该列表并将每个点添加到地图
如果您需要的不仅仅是 LatLng,例如要显示名称,您应该创建一个 class,其中包含您要保存的所有属性,如下所示:
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
的 for 中,在初始化列表后执行以下操作:
listOfPoints.add(new InfoToStore(latLng, nameString))
然后使用 for(InfoToStore info: listOfPoints)
在 onMapReady
中迭代,并使用 info
中的信息添加每个点
我正在检索数据,如下所示。对于每个 'blocks' 数据,我需要在我设置的 Google 地图上添加一个标记。那么是否可以将 'lat'、'lng' 等发送到 onMapReady 方法?
//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())));
}
}
class 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;
}
}
在您的 class 上创建一个 List<LatLng>
并使用您在 onDataChange
然后在 onMapReady
上迭代该列表并将每个点添加到地图
如果您需要的不仅仅是 LatLng,例如要显示名称,您应该创建一个 class,其中包含您要保存的所有属性,如下所示:
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
的 for 中,在初始化列表后执行以下操作:
listOfPoints.add(new InfoToStore(latLng, nameString))
然后使用 for(InfoToStore info: listOfPoints)
在 onMapReady
中迭代,并使用 info
中的信息添加每个点