【问题标题】:Android google map Marker won't ShowAndroid 谷歌地图标记不会显示
【发布时间】:2017-07-17 16:01:02
【问题描述】:

我是 android 开发的新手。我正在尝试在我的应用地图上添加一个 Google 标记,但它不会显示。如果标记的 lat & lng 是双数,我可以设置标记,但是当我将 API 数据放入其中时,它不会显示。有什么建议吗?非常感谢。

@Override
public void onMapReady(final GoogleMap googleMap) {
    this.googleMap = googleMap;

    // Add a marker in Sydney and move the camera
    getLocation();

    // This marker will show at my app screen !
    LatLng latLng = new LatLng(24.9992666, 121.5082287);
    googleMap.addMarker(new MarkerOptions().position(latLng)
            .title("This is office Marker")
    );
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));





    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    this.googleMap.setMyLocationEnabled(true);




    HttpUtil.sendHttpRequest("http://113.10.198.159/appapi/getWIFIList", new HttpCallbackListener() {
        @Override
        public void onFinish(String response) {
            Gson gson = new Gson();
            JsonBean jsonBean = gson.fromJson(response, JsonBean.class);

            Log.d(TAG, "【】【id】【】" + jsonBean.getResult().get(0).getId());
            Log.d(TAG, "【】【merchant_id】【】" + jsonBean.getResult().get(0).getMerchant_id());
            Log.d(TAG, "【】【merchant_name】【】" + jsonBean.getResult().get(0).getMerchant_name());
            Log.d(TAG, "【】【city】【】" + jsonBean.getResult().get(0).getCity());
            Log.d(TAG, "【】【area】【】" + jsonBean.getResult().get(0).getArea());
            Log.d(TAG, "【】【address】【】" + jsonBean.getResult().get(0).getAddress());
            Log.d(TAG, "【】【lat】【】" + jsonBean.getResult().get(0).getLat());
            Log.d(TAG, "【】【lng】【】" + jsonBean.getResult().get(0).getLng());
            Log.d(TAG, "【】【addTime】【】" + jsonBean.getResult().get(0).getAddTime());
            Log.d(TAG, "【】【dlat】【】" + jsonBean.getResult().get(0).getDlat());
            Log.d(TAG, "【】【dlng】【】" + jsonBean.getResult().get(0).getDlng());
            Log.d(TAG, "【】【wificode】【】" + jsonBean.getResult().get(0).getWificode());
            Log.d(TAG, "【】【upstream】【】" + jsonBean.getResult().get(0).getUpstream());
            Log.d(TAG, "【】【downstream】【】" + jsonBean.getResult().get(0).getDownstream());

            //// This marker can not show at my app screen
            LatLng latLng = new LatLng(jsonBean.getResult().get(0).getDlat(), jsonBean.getResult().get(0).getDlng());
            Marker marker = googleMap.addMarker(new MarkerOptions().position(latLng)
                    .title("This is Test Marker")
            );

        }

        @Override
        public void onError(Exception e) {

        }
    });
}



public class HttpUtil {
public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                OkHttpClient client = new OkHttpClient();
                String s1 = "lat";
                String s2 = "24.9992666";
                String s3 = "lng";
                String s4 = "121.5082287";
                RequestBody requestBody = new FormBody.Builder()
                        .add(s1, s2)
                        .add(s3, s4)
                        .build();
                Request request = new Request.Builder()
                        .url(address)
                        .post(requestBody)  //post
                        .build();
                Response response = client.newCall(request).execute();
                String responseData = response.body().string();
                if (listener != null) {
                    // onFinish() method
                    listener.onFinish(responseData);
                }
            } catch (Exception e) {
                if (listener != null) {
                    // onError() method
                    listener.onError(e);
                }

            }
        }
    }).start();
}

}

【问题讨论】:

  • 请输入代码。谢谢。 stackoverflow.com/help/mcve
  • 请添加代码以了解您尝试了什么?
  • @SouravGanguly 这是我的代码,这是我使用 Stackoverflow 时的第一个问题,抱歉,我是新人。
  • @IshanFernando 对不起!我只是把我的代码放进去!
  • 会有什么反应?你能确定你的 lat lng 和 onMapReady 中提到的不同吗?

标签: android google-maps gson okhttp3


【解决方案1】:

地图显示了吗?你里面有什么 获取位置(); 函数,如果没有类似下面的,则添加它

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

还记得放大和缩小地图并平移地图,可能是标记绘制在您没有预料到的位置。 如果它仍然不起作用,请按照本教程进行操作,它必须起作用。 google maps with marker

【讨论】:

  • 是的,地图也出现了。我可以在地图屏幕上看到第一个标记,但第二个无法显示。这真是要了我的命。
  • 你能发布你的整个 mainActivity.java 代码吗?从113.10.198.159/appapi/getWIFIList 收到的结果是什么,当我尝试它时,我几乎一无所获,请确保它收到正确的坐标,在尝试之前将它们解析为加倍要将它们绘制在地图上,如果仍然无法正常工作,请仔细检查 LOGCAT 日志并查看此链接 gist.github.com/saxman/5347195
  • 谢谢!但是我已经修复了它,我将问题代码放在处理程序中并且它已经工作了!无论如何,谢谢。
【解决方案2】:

你确定你从 json 中得到了正确的值吗?它可能会返回一个字符串。您可能想尝试将其转换为 valueOf 以获得所需的类型。

对于双倍来说,它会是这样的:

double lat = Double.valueOf(jsonBean.getResult().get(0).getDlat());

【讨论】:

  • 是的,数据类型为真,我使用邮递员检查。当我调试应用程序时,第二个标记的 lat&lng 都有价值,但它仍然无法显示在屏幕上。 Android Studio 还会显示应用程序关于 Handler 的调试问题。
猜你喜欢
  • 2015-03-14
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多