https://api.uber.com/v1/products (https://developer.uber.com/docs/v1-products)에서 json 데이터 제품을 가져 오려고하는데 다음과 같은 오류가 발생합니다. 여기 추가 기능을 사용하여 Uber API 쿼리
E/AndroidRuntime: FATAL EXCEPTION: main
Process: shaurya.uberintegration, PID: 21380
java.lang.NullPointerException: Attempt to read from field 'java.util.Listshaurya.uberintegration.ProductsResponse.products' on a null object reference
at shaurya.uberintegration.Success.onResponse(Success.java:40)
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
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:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
은 활동에서 관련 코드
RestAPI
public interface RestAPI {
@GET("/v1/products")
Call<ProductsResponse> load(@Header("Authorization") String authToken,
@Query("latitude") float latitude,
@Query("longitude") float longitude);
}
ProductsResponse
public class ProductsResponse {
public List<ProductsPOJO> products;
}
코드입니다
AccessTokenManager accessTokenManager=new AccessTokenManager(this);
String t= accessTokenManager.getAccessToken().getToken();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.uber.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
RestAPI restAPI = retrofit.create(RestAPI.class);
Call<ProductsResponse> call = restAPI.load(t, 28.632328f, 77.216858f);
call.enqueue(this);
}
@Override
public void onResponse(Response<ProductsResponse> response, Retrofit retrofit) {
Toast.makeText(getApplicationContext(),response.body().products.get(0).getDescription(),Toast.LENGTH_SHORT)
.show();
}
@Override
public void onFailure(Throwable t) {
}
모델 클래스
public class ProductsPOJO {
public String display_name;
public String description;
public ProductsPOJO()
{
}
public String getDisplay_name(){
return display_name;
}
public String getDescription(){
return description;
}}
나는 그것을 승인 함께 할 수있는 뭔가가 생각하고 내 GET 요청에 몇 가지 문제가 있습니다. 친절하게 문제를 지적하십시오, 미리 감사드립니다.
'response.body(). products.get (0)'당신은'products' 배열 또는 list가 null이 아니라고 가정하고, 분명히 대소 문자가 아닌'get (0)'을 시도합니다. 'products'가 Null 인 것처럼 보이므로, 사용하기 전에 null이 아닌지 확인해야합니다. – Yazan
@ Yazan 배열이 null인지 아닌지를 확인하기 위해 토스트를 만들었습니다. null 포인터 예외가 null임을 확인합니다. 문제는 GET 요청과 관련이있는 것 같습니다. 내 코드를 수정하여 JSON을 성공적으로 가져 오는 방법을 알려주세요. – jaguar
응답 상태 코드가 400 이상이면 body() 대신 errorBody()에 응답이 반환됩니다. body()에 NPE가 있으면 errorBody()에 뭔가있는 것으로 의심됩니다. errorBody() 안에 무엇이 있는지 디버그하십시오. 또는 제품이 아니라 body()가 있으면 변환기가 제대로 작동하지 않습니다. – Emma