【问题标题】:google maps Activity error creating map markers onCreate, but works with button?谷歌地图活动错误创建地图标记onCreate,但适用于按钮?
【发布时间】:2018-07-23 11:31:18
【问题描述】:

我在 Android Studio 开发一个 Android 应用程序,该应用程序的其余部分已开发,包括 MapActivity。地图标记从以 JSON 格式返回纬度和经度的 Web API 获取它们的位置。当代码在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);
        }
});

【问题讨论】:

  • 分享您的活动的完整代码。

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


【解决方案1】:

你应该在里面设置标记

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

根据documentation

您当前的实现适用于按钮单击,可能是因为,当您在按钮上单击地图时(已经过了一段时间),地图已准备就绪,而在 onCreate 上,地图尚未准备好。

【讨论】:

  • 呵呵,乐于助人。请记住将我的答案设置为正确的,请xD
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2023-03-15
  • 1970-01-01
  • 2018-09-26
  • 2013-05-14
相关资源
最近更新 更多