Android 无法在google地图中添加多个标记
我试图在我的多个位置上添加多个标记,这些标记来自我的GoogleMapAPI上的服务器,代码如下Android 无法在google地图中添加多个标记,android,google-maps,Android,Google Maps,我试图在我的多个位置上添加多个标记,这些标记来自我的GoogleMapAPI上的服务器,代码如下 public class MapNearByCinemasActivity extends FragmentActivity implements OnMapReadyCallback { SupportMapFragment mapFragment; private static final int MY_PERMISSIONS_REQUEST_OPEN_LOCATION = 10
public class MapNearByCinemasActivity extends FragmentActivity implements OnMapReadyCallback {
SupportMapFragment mapFragment;
private static final int MY_PERMISSIONS_REQUEST_OPEN_LOCATION = 100;
Location currentLocation;
ArrayList<Hall> halls = new ArrayList<>();
private MarkerOptions options = new MarkerOptions();
FusedLocationProviderClient fusedLocationProviderClient;
private GoogleMap mMap;
Double lat, lon;
ImageView satalitveIv, defaultIv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_nearby_cinemas);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
loadDirection();
checkPermssion();
}
private void loadDirection() {
final ProgressDialog dialog = new ProgressDialog(MapNearByCinemasActivity.this);
dialog.show();
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, API.getlatLon, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
dialog.dismiss();
try {
JSONArray dataObject = response.getJSONArray(SharedPref.key_data_details);
for (int i = 0; i<dataObject.length();i++){
JSONObject object = dataObject.getJSONObject(i);
Hall hall = new Gson().fromJson(object.toString(),Hall.class);
halls.add(hall);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
dialog.dismiss();
}
});
if (CheckConnectivity.isNetworkAvailable(MapNearByCinemasActivity.this)) {
dialog.dismiss();
RestClient.getInstance(MapNearByCinemasActivity.this).addToRequestQueue(jsonObjectRequest);
} else {
dialog.dismiss();
Toast.makeText(this, "Please Connect to the internet", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
satalitveIv = findViewById(R.id.satellite_iv);
defaultIv = findViewById(R.id.default_iv);
satalitveIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
}
});
defaultIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
});
mMap = googleMap;
// mMap.getMapType();
mMap.setMyLocationEnabled(true);
// mMap.getUiSettings().setZoomControlsEnabled(true);
// mMap.getUiSettings().setZoomGesturesEnabled(true);
LatLng latLng = new LatLng(lat, lon); //current location
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); //for current location of user
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17));
for(int i = 0 ; i < halls.size() ; i++) {
Toast.makeText(this, "Method called", Toast.LENGTH_SHORT).show();
createMarker(halls.get(i).getLat(), halls.get(i).getLon(), halls.get(i).getLocation(), halls.get(i).getName());
}
// Circle circle = mMap.addCircle(new CircleOptions()
// .center(latLng)
// .radius(50)
// .strokeWidth(0)
// .fillColor(Color.parseColor("#500084d3")));
}
protected Marker createMarker(double latitude, double longitude, String title, String snippet) {
return mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.anchor(0.5f, 0.5f)
.title(title)
.snippet(snippet)
.icon(bitmapDescriptorFromVector(this, R.drawable.ic_marker)));
}
private BitmapDescriptor bitmapDescriptorFromVector(Context context, int vectorResId) {
Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorResId);
vectorDrawable.setBounds(0, 0, vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight());
Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
vectorDrawable.draw(canvas);
return BitmapDescriptorFactory.fromBitmap(bitmap);
}
}
公共类MapNearByCinemasActivity扩展了FragmentActivity在MapreadyCallback上的实现{
SupportMapFragment-mapFragment;
私有静态final int MY_PERMISSIONS_REQUEST_OPEN_LOCATION=100;
位置当前位置;
ArrayList halls=新的ArrayList();
private MarkerOptions options=新MarkerOptions();
FusedLocationProviderClient FusedLocationProviderClient;
私有谷歌地图;
双lat,lon;
ImageView satalitveIv,defaultIv;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动、地图、电影院附近);
fusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(此);
加载方向();
checkpermission();
}
私有void加载方向(){
最终进度对话框=新建进度对话框(MapNearByCinemasActivity.this);
dialog.show();
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,API.getlatLon,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
dialog.dismise();
试一试{
JSONArray dataObject=response.getJSONArray(SharedPref.key\u data\u详细信息);
对于(int i=0;i而言,my created for循环未执行的原因是loadDirection()
的结果尚未到达
要解决此问题,请将为循环创建的my重新定位到内部onReponse()
@覆盖
公共void onResponse(JSONObject响应){
...
...
大厅。添加(大厅);
}
//修理工
对于(int i=0;i
我为循环创建的没有执行的原因是loadDirection()
的结果没有到达
要解决此问题,请将为循环创建的my重新定位到内部onReponse()
@覆盖
公共void onResponse(JSONObject响应){
...
...
大厅。添加(大厅);
}
//修理工
对于(int i=0;i
@Override
public void onResponse(JSONObject response) {
...
...
halls.add(hall);
}
//fixme
for(int i = 0 ; i < halls.size() ; i++) {
Toast.makeText(this, "Method called", Toast.LENGTH_SHORT).show();
createMarker(halls.get(i).getLat(), halls.get(i).getLon(), halls.get(i).getLocation(), halls.get(i).getName());
}
} catch (JSONException e) {
...
...