Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在google地图中添加多个标记_Android_Google Maps - Fatal编程技术网

Android 无法在google地图中添加多个标记

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

我试图在我的多个位置上添加多个标记,这些标记来自我的GoogleMapAPI上的服务器,代码如下

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) {
  ...
  ...