【问题标题】:How do you add addMarker on GoogleMap on Arraylist correctly如何在 Arraylist 上的 Google Map 上正确添加添加标记
【发布时间】:2017-08-09 11:59:12
【问题描述】:

我在如何在 Arraylist 上添加 addMarker 时遇到问题。当我在我的 for 循环中使用 createMarker 来添加值时。

MainActivity extends BaseActivityLocation
        implements NavigationView.OnNavigationItemSelectedListener, SearchView.OnQueryTextListener,
        SearchView.OnSuggestionListener {

@Override
public boolean onQueryTextSubmit(String query) {
    for(Marker m : list) {
        System.out.println(list+m.getSnippet() + m.getTitle() + m.getPosition() + " snippet");
        if(m.getSnippet().toLowerCase().equals(query)) {
            Toast.makeText(this, "You searched for: " + query , Toast.LENGTH_SHORT).show();
            mMapFragment.animateCamera(CameraUpdateFactory.newLatLngZoom(m.getPosition(), 9.0f));
            break; // stop the loop
        }
    }
    return false;
}

   public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
        // success response
        if (response.body().isJsonArray()) {
            JsonArray objectWhichYouNeed = response.body().getAsJsonArray();
            System.out.println(objectWhichYouNeed + " Object");

            for (int i = 0; i < response.body().getAsJsonArray().size(); i++) {
                JsonElement plate_num_array = response.body().getAsJsonArray().get(i);
                JsonObject plate_num_obj = plate_num_array.getAsJsonObject();
                String plate_n = plate_num_obj.get("plate_num").toString();
                String plate_nString = plate_n;
                plate_nString = plate_nString.replace("\"", "");
                String plate_num = String.valueOf(plate_nString);

                JsonElement lat_array = response.body().getAsJsonArray().get(i);
                JsonObject lat_obj = lat_array.getAsJsonObject();
                String lati = lat_obj.get("lat").toString();
                String latiString = lati;
                latiString = latiString.replace("\"", "");
                String lat = String.valueOf(latiString);

                JsonElement lng_array = response.body().getAsJsonArray().get(i);
                JsonObject lng_obj = lng_array.getAsJsonObject();
                String longi = lng_obj.get("lng").toString();
                String longiString = longi;
                longiString = longiString.replace("\"", "");
                String lng = String.valueOf(longiString);

                createMarker(d, d2, plate_num);
            }

这里的问题是,当调用 createMarker 时,标记只会替换它在 Arraylist 上的值。我想要的是在数组列表中添加标记,例如 [0,0,0,0].. 我该如何实现?

 public MarkerOptions createMarker(Double latitude, final Double longitude, String Plate_num) {
    BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.bus);

    list = new ArrayList<>();

    System.out.print(list + " Snippp");

   /*  mMapFragment.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .anchor(0.5f, 0.5f)
            .title("Plate No.")
            .snippet(Plate_num)
            .icon(image));*/

    mMapFragment.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            marker.hideInfoWindow();
        }
    });

    mMapFragment.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9.0f));

    mMapFragment.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

        @Override
        public boolean onMarkerClick(final Marker marker) {
            vm = new VehicleMap();

            vm.setSnippet(marker.getSnippet());
            vm.setPlate_num(marker.getSnippet());

            latitudeG = marker.getPosition().latitude;
            longitudeG = marker.getPosition().longitude;

            marker.showInfoWindow();

            BottomSheetDialogFragment bottomSheetDialogFragment = new BottomSheetModalFragment(activity);
            bottomSheetDialogFragment.show(getFragmentManager(), bottomSheetDialogFragment.getTag());

            return true;
        }
    });

    return new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .title("Plate No.")
            .snippet(Plate_num)
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

}

【问题讨论】:

  • 您的 JSON 解析看起来非常复杂。你调用了response.body().getAsJsonArray().get(i) 3 次...这是 完全相同 对象,所以你只需要调用一次。
  • 感谢您的观看。 @Cricket_007 通常在赶时间时发生
  • 另外,我不确定.replace("\"", ""); 想要做什么,但是如果您已将 JSON 对象转换为字符串,那么您将在数据中看到反斜杠,但它们不是t 实际上在那里。它们仅在您查看数据时显示
  • 它删除用“”括起来的值
  • 是的,但是这些是已经转义的 JSON 字符串,这意味着您在某处进行了一些额外的编码

标签: java android arraylist google-maps-android-api-2


【解决方案1】:

它不是覆盖一个值,而是替换整个列表。

不要创建新列表。让方法创建并返回。

public MarkerOptions createMarker(Double latitude, final Double longitude, String Plate_num) {

    // list = new ArrayList<>(); // Don't do this

    BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.bus);

   return new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .title("Plate No.")
            .snippet(Plate_num)
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
}

...

onResponse( ... ) {
    ...
    String lng = String.valueOf(longiString);

    MarkerOptions opts = createMarker(d, d2, plate_num);
    Marker m = mMapFragment.addMarker(opts);
    list.add(m);
}

【讨论】:

  • 嗨 crickket_007,我把这些放在哪里? MarkerOptions opts = createMarker(d, d2, plate_num); Marker m = mMapFragment.addMarker(opts); list.add(m);
  • onResponse 的末尾,您已经有createMarker
  • 你能调试一下为什么我仍然得到相同的板号https://pastebin.com/gB0ASNRx
  • 不是没有minimal reproducible example,没有。也许你可以阅读。 stackoverflow.com/questions/19843506/…
  • 不用担心。您知道如何在我将在 pastebin 代码上使用的另一个类上使用 List&lt;Marker&gt; list 吗?我读到了If the objects in your list store data in static fields, each object in your list will appear to be the same
猜你喜欢
  • 2017-10-11
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多