2017-07-28 52 views
0

我正在使用node.js环回框架,并试图获取医院的位置。 和我不断收到Android Google Map Api Latlng字符串不能转换为Double

"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”)返回double类型。我真的不知道问题出在哪里!请帮帮我!

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) 
+0

你肯定HospitalFragment.java:432是这一行 - >选项的MarkerOptions =新的MarkerOptions() .POSITION(新经纬度(hospital.getGeolocation()获得(“LAT。 “),hospital.getGeolocation()。get(”lng“))) .title(hospital.getName());? –

回答

0

尝试区分它是这样的:

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

在Java中,你必须指定正是你需要的类型。 所以如果方法需要一个double并且你传递了字符串,它将会创建一个类转换异常。

试试这个:

Double.parseDouble("12.322")