【问题标题】:How to add multiple markers on google maps fragment with json in android studio如何在android studio中使用json在谷歌地图片段上添加多个标记
【发布时间】:2021-01-10 15:28:33
【问题描述】:

我需要在片段活动的谷歌地图上添加多个标记。

这是我当前的代码:

 public View onCreateView(@NonNull LayoutInflater inflater,
                          ViewGroup container, Bundle savedInstanceState) {
     galleryViewModel =
             new ViewModelProvider(this).get(GalleryViewModel.class);
     View view = inflater.inflate(R.layout.fragment_gallery, container, false);

     arrayList = new ArrayList<>();

     SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
             .findFragmentById(R.id.map);
     mapFragment.getMapAsync(this::onMapReady);
     
     ProgressDialog progressDialog = new ProgressDialog(getActivity());
     progressDialog.setMessage("Chargemnt des données en cours...");
     progressDialog.show();

     RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
     String url="http://emc2-cloud.com:8079/API/login";
     StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
         @Override
         public void onResponse(String response) {
             progressDialog.dismiss();
             JSONObject responselog2 = null;
             try {
                 responselog2 = new JSONObject(response);
                 JSONObject logincolier = responselog2.getJSONObject("colier");
                /* latitude_maison = logincolier.getString("latitude_maison");
                 longitude_maison = logincolier.getString("longitude_maison");*/

                 liste_colier = logincolier.getJSONArray("donnes_colier");
                 for (int k = 0; k<liste_colier.length(); k++){

                     JSONObject colierliste = liste_colier.getJSONObject(k);

                     detail_distance = colierliste.getString("distance");
                     vitesse = colierliste.getString("vitesse");
                     detail_latitude = colierliste.getDouble("latitude");
                     nom_colier = colierliste.getString("nom_colier");
                     detail_longitude = colierliste.getDouble("longitude");
                     etat_colier = colierliste.getString("etat_colier");                        
                 }
             } catch (JSONException e) {
                 e.printStackTrace();
             }

         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             test.setTextColor(Color.RED);
             test.setText("Connexion échouée");
         }
     }){
         @Override
         protected Map<String,String> getParams(){
             Map<String,String> params=new HashMap<String, String>();
             params.put("username",identifiant.getText().toString());
             params.put("password",mot_de_passe.getText().toString());
             return params;
         }

     };
     requestQueue.add(stringRequest);

 public void onMapReady(GoogleMap googleMap) {
      mMap = googleMap;
      customMarker = BitmapDescriptorFactory.fromResource(R.drawable.teteboeuf);

     colier = new LatLng(detail_latitude,detail_longitude);

      mMap.addMarker(new MarkerOptions().position(colier).title(MainActivity.nom_colier).snippet("Vitessedu colier : "+MainActivity.vitesse+" km").icon(customMarker));
      mMap.moveCamera(CameraUpdateFactory.newLatLng(colier));
      mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
          @Override
          public void onInfoWindowClick(Marker marker) {
              Intent intent = new Intent(getActivity(),DetailColier.class);
              startActivity(intent);
          }
      });
 }

【问题讨论】:

  • 请编辑您的帖子,并添加有关您的问题的一些详细信息。您的问题帖子格式不正确。
  • 您需要在onResponse 方法中的for 循环的末尾添加一行(或两行)到addMarker,方法与您的addMarker 类似。 onMapReady。看来您有 lat/lng 和可能的文本,但很难用结果代码来判断。

标签: android json maps fragment


【解决方案1】:

你可以这样做,

                for (int k = 0; k<liste_colier.length(); k++){

                    JSONObject colierliste = liste_colier.getJSONObject(k);

                    detail_distance = colierliste.getString("distance");
                    vitesse = colierliste.getString("vitesse");
                    detail_latitude = colierliste.getDouble("latitude");
                    nom_colier = colierliste.getString("nom_colier");
                    detail_longitude = colierliste.getDouble("longitude");
                    etat_colier = colierliste.getString("etat_colier");
                    addMarker(detail_latitude ,detail_longitude)

                }

在您的活动中定义此方法。

void addMarker(Double latitude, Double longitude){
     LatLng latLong = new LatLng(Double latitude, Double longitude)
     if(mMap!=null{
            mMap.addMarker(new MarkerOptions().position(latLong))
     }
}

要为标记添加标题和其他信息,您可以参考 Marker Official Google Doc

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2011-09-11
    • 2021-09-12
    • 2017-12-25
    • 2018-11-02
    • 2021-07-22
    相关资源
    最近更新 更多