Как мы можем установить пользовательское информационное окно с динамическими данными с сервера, используя залп - PullRequest
0 голосов
/ 06 мая 2019

У меня есть данные json на моем сервере, и я успешно получаю эти данные в своем проекте Android с помощью библиотеки залпов, и после этого на основе этих данных я показываю маркеры на картах Google. Но проблема заключается в том, что всякий раз, когда я нажимаю на какой-то маркер,не заполняется пользовательским содержимым информационного окна, он всегда отображает одни и те же данные в информационном окне. Я использую для этого специальный адаптер информационного окна. Ниже приводится основная деятельность, в которой есть вся логика этой вещи.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (checkGooglePlayServicesAvailability()){
            Toast.makeText(this,"Connected to google play services",Toast.LENGTH_LONG).show();
            setContentView(R.layout.activity_maps);
            initMap();
        }

    }@Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap=googleMap;
        if (mGoogleMap!=null){
            mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker) {
                    Log.e("marker","marker clicked"+marker.getPosition());
                    marker.hideInfoWindow();
                    marker.showInfoWindow();
                    return false;
                }
            });
            mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
                @Override
                public View getInfoWindow(Marker marker) {
                    return null;
                }

                @Override
                public View getInfoContents(Marker marker) {

                    View view= getLayoutInflater().inflate(R.layout.window,null);

                    TextView name= (TextView) view.findViewById(R.id.name);
                    TextView time= (TextView) view.findViewById(R.id.time);
                    TextView servic= (TextView) view.findViewById(R.id.servic);
                    TextView phone= (TextView) view.findViewById(R.id.contct);
                    Log.e("saloon","Working hours "+workingHours);
                    Log.e("saloon","desc "+desc);
                    Log.e("saloon","pgone "+cntct);
                    LatLng ll=marker.getPosition();
                    name.setText("Name : "+marker.getTitle());
                    InfoWindoData infoWindoData=(InfoWindoData) marker.getTag();
                    time.setText("Timings : "+workingHours);
                    servic.setText("Services  : "+desc);
                    phone.setText("Phone : "+cntct);
                    return view;
                }
            });
        }
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
        {
            Log.e("JSONResult","Permission not granted");
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
            return;

        }
        else {

            showMarkers();
        }

    }

    public void showMarkers(){
        Log.e("JSONResult","Permission granted");
        requestQueue= Volley.newRequestQueue(getApplicationContext());

        StringRequest stringRequest=new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("JSONResult" , response.toString());
                JSONObject j = null;
                try{
                    j =new JSONObject(response);
                    result = j.getJSONArray("FL");
                    for(int i=0;i<result.length();i++){
                        JSONObject jsonObject1=result.getJSONObject(i);
                        Double lat=jsonObject1.getDouble("10");
                        Double lng=jsonObject1.getDouble("11");
                        String lat_i = jsonObject1.getString("10");
                        String long_i = jsonObject1.getString("11");
                        String saloonName=jsonObject1.getString("1");
                        workingHours=jsonObject1.getString("8");
                        Log.e("saloon","Working hours "+workingHours);
                        desc=jsonObject1.getString("9");
                        Log.e("saloon","desc "+desc);
                        cntct=jsonObject1.getString("4");
                        Log.e("saloon","pgone "+cntct);
                        if (ifLocationGiven==""){
                            marker= mGoogleMap.addMarker(new MarkerOptions()
                                    .position(new LatLng(Double.parseDouble(lat_i) , Double.parseDouble(long_i)))
                                    .title(saloonName).position(new LatLng(lat,lng))
                                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE))
                            );

                            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(31.5151,74.3439), 6.0f));
                        }

                    }

                }catch (NullPointerException e){
                    e.printStackTrace();

                }

                catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Toast.makeText(Maps.this, error.getMessage(), Toast.LENGTH_LONG).show();
            }
        });


        int socketTimeout = 10000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    }
...