【问题标题】:Android Google Map Api Latlng String cannot be cast to DoubleAndroid Google Map Api Latlng String 无法转换为 Double
【发布时间】:2017-07-28 08:52:20
【问题描述】:

我正在使用 node.js 环回框架,并尝试获取医院的位置。 我不断得到

 "java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double at " on  MarkerOptions options = new MarkerOptions()
                                .position(new LatLng(hospital.getGeolocation().get("lat"), hospital.getGeolocation().get("lng")))
                                .title(hospital.getName());

即使似乎没有与强制转换相关的错误,也会出现此错误。我还确定了 hospital.getGeolocation().get("lng") 返回双精度类型。我真的不知道是什么问题!请帮我!

floatingSearchView.setOnSearchListener(new FloatingSearchView.OnSearchListener() {
            @Override
            public void onSuggestionClicked(final SearchSuggestion searchSuggestion) {
                hospitalRepository.search(ImmutableMap.of("filter[where][name][like]", searchSuggestion.getBody()), new ListCallback<Hospital>() {
                    @Override
                    public void onSuccess(List<Hospital> hospitalObjects) {
                        Log.i("TAG", hospitalObjects.toString());
                        recyclerAdapter.swapData(hospitalObjects);
                        isMapMovedBySearch = true;
                        googleMap.clear();
                        LatLngBounds.Builder builder = new LatLngBounds.Builder();
                        for(Hospital hospital : hospitalObjects) {
                            Log.i("TAG", hospital.toString());
                            double lat = hospital.getGeolocation().get("lat").doubleValue();
                            double lng = hospital.getGeolocation().get("lng").doubleValue();

                            LatLng latLng1 = new LatLng(lat, lng);
                            MarkerOptions options = new MarkerOptions()
                                    .position(latLng1)
                                    .title(hospital.getName());
                            builder.include(googleMap.addMarker(options).getPosition());
                        }
                        LatLngBounds bounds = builder.build();
                        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 0);
                        googleMap.moveCamera(cu);
                    }
                    public void onError(Throwable t){
                        Log.e("error", "Not connected to loopback server!");
                        Log.e("error", "TRACE", t);
                    }
                });
                mLastQuery = searchSuggestion.getBody();


            }

            @Override
            public void onSearchAction(String query) {
                mLastQuery = query;
                hospitalRepository.search(ImmutableMap.of("filter[where][name][like]", query), new ListCallback<Hospital>() {
                    @Override
                    public void onSuccess(List<Hospital> hospitalObjects) {

                        isMapMovedBySearch = true;
                        googleMap.clear();
                        LatLngBounds.Builder builder = new LatLngBounds.Builder();

                        for(Hospital hospital : hospitalObjects) {
                            Log.i("TAG", "Lag :" + hospital.getGeolocation().get("lat") );
                            Log.i("TAG","lng :" + hospital.getGeolocation().get("lng"));
                            MarkerOptions options = new MarkerOptions()
                                    .position(new LatLng(hospital.getGeolocation().get("lat"), hospital.getGeolocation().get("lng")))
                                    .title(hospital.getName());
                            //builder.include(googleMap.addMarker(options).getPosition());
                            googleMap.addMarker(options);
                        }
                        recyclerAdapter.swapData(hospitalObjects);
                        LatLngBounds bounds = builder.build();
                        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 0);
                        googleMap.moveCamera(cu);
                    }

                    public void onError(Throwable t){
                        Log.e("error", "Not connected to loopback server!");
                        Log.e("error", "TRACE", t);
                    }
                });
            }
        });

Logcat

E/error: Not connected to loopback server!
E/error: TRACE
         java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
             at com.yeomiae.dev.redmom.Fragments.HospitalFragment$4$1.onSuccess(HospitalFragment.java:432)
             at com.strongloop.android.loopback.callbacks.JsonArrayParser.onSuccess(JsonArrayParser.java:31)
             at com.strongloop.android.remoting.adapters.Adapter$JsonArrayCallback.onSuccess(Adapter.java:138)
             at com.strongloop.android.remoting.adapters.Adapter$JsonCallback.onSuccess(Adapter.java:81)
             at com.strongloop.android.remoting.adapters.RestAdapter$CallbackHandler.onSuccess(RestAdapter.java:220)
             at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:276)
             at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:134)
             at android.os.Handler.dispatchMessage(Handler.java:102)
             at android.os.Looper.loop(Looper.java:135)
             at android.app.ActivityThread.main(ActivityThread.java:5430)
             at java.lang.reflect.Method.invoke(Native Method)
             at java.lang.reflect.Method.invoke(Method.java:372)
             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)
             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

【问题讨论】:

  • 你确定 HospitalFragment.java:432 是这一行 -> MarkerOptions options = new MarkerOptions() .position(new LatLng(hospital.getGeolocation().get("lat"), hospital.getGeolocation ().get("lng"))) .title(hospital.getName());?

标签: android dictionary casting loopback


【解决方案1】:

试着这样写:

double lat = Double.parseDouble(hospital.getGeolocation().get("lat"));

【讨论】:

    【解决方案2】:

    在 Java 中,您必须准确指定所需的类型。 因此,如果该方法需要一个 double 并且您传递字符串,它将创建一个类转换异常。

    试试这个:

    Double.parseDouble("12.322")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 2013-05-02
      • 2016-07-29
      • 1970-01-01
      • 2014-08-15
      相关资源
      最近更新 更多