谷歌地图活动错误创建地图标记onCreate,但可以使用按钮吗?

时间:2018-07-23 11:31:19

标签: android google-maps android-studio android-fragments

我正在使用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);
        }
});

1 个答案:

答案 0 :(得分:0)

您应该在内部设置标记

@Override
public void onMapReady(GoogleMap map) {
   //do stuff on map here
}

按照documentation

您当前的实现可以通过单击按钮进行操作,这可能是因为,当您在按钮上单击地图时(已经过去了一段时间),地图已经准备好了,而在onCreate上,地图尚未准备好。