2016-05-31 5 views
1

https://api.uber.com/v1/productshttps://developer.uber.com/docs/v1-products)からjsonデータを取得しようとしていますが、次のエラーが発生しています。ここRetrofitを使用して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'配列またはリストがnullでない 'と仮定されている、とあなたは明らかに'取得(0) 'れていない場合、などにしてみてください'products'はNullと見えますので、使用する前にヌルでないことを確認する必要があります。 – Yazan

+0

@ Yazan配列がnullかどうかを確認するためにそのトーストを作成しました。ヌルポインタ例外がnullであることを確認しています。問題はGET要求の問題だと思います。 JSONを正常に取得するためのコードを変更する方法を教えてください。 – jaguar

+1

応答ステータスコードが400以上の場合、body()ではなくerrorBody()に返されます。 body()にNPEがある場合は、errorBody()に何かがあると思われます。 errorBody()内に何があるのか​​をデバッグしてください。うまくいけば理由があります。または、body()は製品ではない場合、コンバータは正しく動作していません。 – Emma

答えて

0

問題を修正しました。ベアラを渡す前にベアラをアクセストークンに追加しました。

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

関連する問題