我正在使用Android Studio
中的Android应用程序,其余的应用程序都已开发,包括MapActivity
。地图标记从Web API获取其位置,该Web API以JSON格式返回经度和纬度。当代码位于onClickListener
内并按下相应的按钮时,该代码可以完美地完成我想要的所有操作,但是我希望标记能够立即加载到onCreate
中,这样用户就不必按下按钮以加载标记。但是,当我使用完全相同的代码并将其放在onCreate
中时,它根本不起作用,将调用errorListener
,但是当我尝试打印错误消息时,它为空吗?
这是代码(需先感谢)
loadMachines.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
StringRequest st = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonarray = new JSONObject(response);
JSONArray machinesArray = jsonarray.getJSONArray("machines");
for (int i = 0; i < machinesArray.length();i++){
JSONObject machineProperties = machinesArray.getJSONObject(i);
String addr1 = machineProperties.getString("address_1");
String addr2 = machineProperties.getString("address_2");
String lat = machineProperties.getString("lat");
String lng = machineProperties.getString("lng");
MarkerOptions options = new MarkerOptions().title(addr1 + " " + addr2).position(new LatLng(Double.parseDouble(lat),Double.parseDouble(lng)));
mGoogleMap.addMarker(options);
}
Toast.makeText(MapActivity.this, "Success, we have updated the locations, zoom out to view!", Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error.networkResponse.statusCode == 500) {
Toast.makeText(MapActivity.this , "Internal Server Error", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MapActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}) {
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("key", "****");
params.put("token", tokenString);
params.put("user_lat", String.valueOf(getLatitude()));
params.put("user_lng", String.valueOf(getLatitude()));
return params;
}
};
MySingleton.getInstance(MapActivity.this).addToRequestQueue(st);
}
});
答案 0 :(得分:0)
您应该在内部设置标记
@Override
public void onMapReady(GoogleMap map) {
//do stuff on map here
}
您当前的实现可以通过单击按钮进行操作,这可能是因为,当您在按钮上单击地图时(已经过去了一段时间),地图已经准备好了,而在onCreate
上,地图尚未准备好。