【发布时间】: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