https://api.uber.com/v1/products(https://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リクエストといくつかの問題があります。問題を事前に指摘してください。
'response.body()。products.get(0)'あなたがproducts'配列またはリストがnullでない 'と仮定されている、とあなたは明らかに'取得(0) 'れていない場合、などにしてみてください'products'はNullと見えますので、使用する前にヌルでないことを確認する必要があります。 – Yazan
@ Yazan配列がnullかどうかを確認するためにそのトーストを作成しました。ヌルポインタ例外がnullであることを確認しています。問題はGET要求の問題だと思います。 JSONを正常に取得するためのコードを変更する方法を教えてください。 – jaguar
応答ステータスコードが400以上の場合、body()ではなくerrorBody()に返されます。 body()にNPEがある場合は、errorBody()に何かがあると思われます。 errorBody()内に何があるのかをデバッグしてください。うまくいけば理由があります。または、body()は製品ではない場合、コンバータは正しく動作していません。 – Emma