2017-07-28 3 views
0

私はnode.jsループバックフレームワークを使用して病院の所在地を取得しようとしています。 は、と私はエラーをキャストに関連したことがあっていないようだにもかかわらずAndroid Googleマップ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()」(緯度得ます。 ")、hospital.getGeolocation()。get(" lng "))) .title(hospital.getName());? –

答えて

0

はこのようにそれを小文字にしてください:Javaでは

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

あなたが必要な正確に型を指定する必要があります。 したがって、メソッドがdoubleを必要とし、文字列を渡すと、クラスキャスト例外が作成されます。

これを試してみてください:

Double.parseDouble("12.322") 
関連する問題