2017-03-04 7 views
-1

내 안드로이드 응용 프로그램을 사용하고 있습니다.Google지도에 오류가 발생했습니다. Google지도에 오류가 있습니다.

{ 
"placemarks":[ 
    { 
    "address":"Via di Santa Maria a Marignolle, 15, 50124 Firenze", 
    "coordinates":[ 
     11.23348, 
     43.75855, 
     0 
    ], 
    "engineType":"CE", 
    "exterior":"GOOD", 
    "fuel":100, 
    "interior":"GOOD", 
    "name":"049/EV284TP", 
    "smartPhoneRequired":false, 
    "vin":"WME4513341K774636" 
    } 
] 
} 

내가 개체에 대해 "장소 표시"모든 otehr 항목이 뽀조 모델을 쓰고 있습니다 이 내가 PIN이 필요 JSON 개체의 구조입니다. 그리고 난 JSON 데이터를 가져 오지 및지도에 넣어이 코드를 작성할 수 있습니다

private void getPlacemark(){ 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("https://www.car2go.com/api/v2.1/vehicles?loc=roma&oauth_consumer_key=roadzapp&format=json") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    APIService service = retrofit.create(APIService.class); 
    Call<ResponsePlacemarks> call = service.getPlacemark(); 

    call.enqueue(new Callback<ResponsePlacemarks>() { 
     @Override 
     public void onResponse(Response<ResponsePlacemarks> response, Retrofit retrofit) { 
      Log.d("response: ", String.valueOf(response.body())); 
      try { 
       mMap.clear(); 
       // This loop will go through all the results and add marker on each location. 
       for (int i = 0; i < response.body().getPlacemarks().size(); i++) { 
        Double lat = response.body().getPlacemarks().get(i).getCoordinates().get(1); 
        Double lng = response.body().getPlacemarks().get(i).getCoordinates().get(0); 
        String placeName = response.body().getPlacemarks().get(i).getAddress(); 
        MarkerOptions markerOptions = new MarkerOptions(); 
        LatLng latLng = new LatLng(lat, lng); 
        // Position of Marker on Map 
        markerOptions.position(latLng); 
        // Adding Title to the Marker 
        markerOptions.title(placeName); 
        // Adding Marker to the Camera. 
        Marker m = mMap.addMarker(markerOptions); 
        // Adding colour to the marker 
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
        // move map camera 
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
        mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 
       } 
      } catch (Exception e) { 
       Log.d("onResponse", "There is an error"); 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(Throwable t) { 

     } 
    }); 



} 

하지만 지금은 참고 부하 인 JSON을 응용 프로그램을 실행하고 난 루프의 첫 번째 줄에 오류가 있습니다

java.lang.NullPointerException이 :

하이 가지고 널 객체 참조에 ')를 java.util.List android.mobility.com.mobiity.model.ResponsePlacemarks.getPlacemarks ('가상 메소드를 호출 시도 오류를 발견했습니다. APIService에서 이런 식으로 @GET 메서드를 설정했습니다 : @GET (".") 왜냐하면 저는 URL로 BaseURL을 사용하기 때문입니다. 그래서 @GET 모든 URL을 설정하면 메서드가 잘 작동합니다. 어떻게 URL을 @GET에 BaseULRalso로만 사용할 수 있습니까?

답변

1

먼저 response.body()으로 전화를 걸 수 있습니다.

의견을 말하십시오.

// Log.d("response: ", String.valueOf(response.body())); 

그리고

final ResponsePlacemarks _response = response.body(); 
final List<Placemark> placemarks = _response.getPlacemarks(); 

for (int i = 0; i < placemarks.size(); i++) { 
    final Placemark p = placemarks.get(i); 
    Coordinates c = p.getCoordinates(); 

    Double lat = c.get(1); 
    Double lng = c.get(0); 

    String placeName = p.getAddress(); 

그리고 문제가 해결되지 않을 경우, 당신은 정확하게 JSON 응답을 일치로 자바 객체에 필요한 변수리스트를 추출, 그렇지 않은 경우는 null입니다

어떻게 URL을 @GET에 BaseULRalso로만 사용할 수 있습니까? 귀하의 기본 URL이 그럼 당신은 아마

@GET("/vehicles") 
public ResponsePlacemarks getVehicles(
    @Query("oauth_consumer_key") String key, 
    @Query("format") String format 
    @Query("loc") String loc 
); 

public ResponsePlacemarks getVehicles(String loc) { 
    return getVehicles("roadzapp", "json", loc); 
} 

하거나

@GET("/vehicles?format=json") 
public ResponsePlacemarks getVehicles(
    @Query("oauth_consumer_key") String key, 
    @Query("loc") String loc 
); 

,536처럼 뭔가를 할 수 있어야 뭔가이

https://www.car2go.com/api/v2.1 

과 같아야합니다

키를 메서드 호출에 넣는 이유는 보안상의 이유로 장치에 키를 문자열로 저장하면 안됩니다.

-1

대부분의 POJO가 JSON 구조와 일치하지 않습니다. POJO 클래스를 게시 할 수 있으며 JSON을 비 직렬화하는 방법은 무엇입니까?

+0

위의 의견에 게시해야합니다. –

+0

@ cricket_007 당신은 stackoverflow 경찰입니까? 내가 염려하는 한, 나는 그 문제의 가장 큰 원인에 대한 질문에 대답했다. 응답의 두 번째 부분이 정확히 내가 대답 한 (그리고 다시 NPE의 원인 일 가능성이 높기 때문에) 의견을 사용하지 않는 이유는 무엇입니까 –

+0

답변에서 질문 한 것을 고려해 볼 때, 좋은 대답 ...반면에 내 대답은'response.body()'가 한 번만 호출되도록 허용하는 OkHttp의 다른 문제를 다룬다. –

관련 문제