2016-05-31 2 views
1

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 요청에 몇 가지 문제가 있습니다. 친절하게 문제를 지적하십시오, 미리 감사드립니다.

+0

'response.body(). products.get (0)'당신은'products' 배열 또는 list가 null이 아니라고 가정하고, 분명히 대소 문자가 아닌'get (0)'을 시도합니다. 'products'가 Null 인 것처럼 보이므로, 사용하기 전에 null이 아닌지 확인해야합니다. – Yazan

+0

@ Yazan 배열이 null인지 아닌지를 확인하기 위해 토스트를 만들었습니다. null 포인터 예외가 null임을 확인합니다. 문제는 GET 요청과 관련이있는 것 같습니다. 내 코드를 수정하여 JSON을 성공적으로 가져 오는 방법을 알려주세요. – jaguar

+1

응답 상태 코드가 400 이상이면 body() 대신 errorBody()에 응답이 반환됩니다. body()에 NPE가 있으면 errorBody()에 뭔가있는 것으로 의심됩니다. errorBody() 안에 무엇이 있는지 디버그하십시오. 또는 제품이 아니라 body()가 있으면 변환기가 제대로 작동하지 않습니다. – Emma

답변

0

문제가 해결되었습니다. Bearer를 전달하기 전에 액세스 토큰에 Bearer를 추가했습니다.

String t= "Bearer "+accessTokenManager.getAccessToken().getToken(); 
+0

@MnemonicFlow 대부분의 엔드 포인트는 사용자 인증이 필요합니다. 먼저 제품을 사용해 보았습니다. 이 문제를 자세히 살펴 보시기 바랍니다. [질문] (http://stackoverflow.com/questions/37589107/not-able-to-post-a-ride-request-using-uber-api). 성공적으로 인증 할 수 없습니다. – jaguar

+0

엔드 포인트 개요 및 필요한 인증 정보를 보려면 [이 테이블 체크 아웃] (https://github.com/shernshiou/node-uber#method-overview)을 참조하십시오. Node.js 용 Uber 래퍼 용으로 만들었습니다. – agraebe

관련 문제