2017-03-05 7 views
0

現在改造2を学習中で、問題が発生しました。私はここで改造2はメンバー変数にnullを返します

http://services.groupkt.com/country/get/all 

無料のAPIを使用してい

は私のPOJOです

RestResponse

public class RestResponse { 

    @SerializedName("messages") 
    @Expose 
    private List<String> messages; 
    @SerializedName("result") 
    @Expose 
    private List<Result> result; 

    public List<String> getMessages() { 
     return messages; 
    } 

    public void setMessages(List<String> messages) { 
     this.messages = messages; 
    } 

    public List<Result> getResult() { 
     return result; 
    } 

    public void setResult(List<Result> result) { 
     this.result = result; 
    } 

} 

結果

public class Result { 

    @SerializedName("name") 
    @Expose 
    private String name; 
    @SerializedName("alpha2_code") 
    @Expose 
    private String alpha2Code; 
    @SerializedName("alpha3_code") 
    @Expose 
    private String alpha3Code; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAlpha2Code() { 
     return alpha2Code; 
    } 

    public void setAlpha2Code(String alpha2Code) { 
     this.alpha2Code = alpha2Code; 
    } 

    public String getAlpha3Code() { 
     return alpha3Code; 
    } 

    public void setAlpha3Code(String alpha3Code) { 
     this.alpha3Code = alpha3Code; 
    } 
} 

ApiInterface

public interface ApiInterface { 

    @GET("country/get/all") 
    Call<RestResponse> getCountry(); 

} 

MainActivity

ApiInterface apiService = ApiClient.getmRetrofitClient().create(ApiInterface.class); 
     Call<RestResponse> call = apiService.getCountry(); 
     call.enqueue(new Callback<RestResponse>() { 
      @Override 
      public void onResponse(Call<RestResponse> call, Response<RestResponse> response) { 
       List<Result> results = response.body().getResult(); 
      } 

      @Override 
      public void onFailure(Call<RestResponse> call, Throwable t) { 
       Log.e("onFailure", t.getMessage()); 
      } 
     }); 

改造はonResponseコールバックを呼び出しますが、私はresponse.bodyから結果を取得しようとしているとき()はnullを返します。これをどうすれば解決できますか?

+0

APIレスポンスを投稿できますか? – Sonali8890

+0

@ Sonali8890 http://services.groupkt.com/country/get/allにアクセスして回答を見ることができます – manman

答えて

1

RestResponseを保持するために別のクラスが必要です。取得しているJsonレスポンスには、第1レベルのオブジェクトRestResponseがあり、次にそのクラスがあります。

enter image description here

だからあなたのようなものが必要になります

public class CountryResponse { 

    @SerializedName("RestResponse") 
    @Expose 
    private RestResponse restResponse; 

    public RestResponst getRestResponse() { return restResponse; } 
    public void setRestResponse(RestResponse restResp) {restResponse = restResp; } 
} 

をそしてあなただけにAPI呼び出しの行を変更する必要があります。これを試してみて、これは動作するはず

ApiInterface apiService = ApiClient.getmRetrofitClient().create(ApiInterface.class); 
    Call<CountryResponse> call = apiService.getCountry(); 
    call.enqueue(new Callback<CountryResponse>() { 
     @Override 
     public void onResponse(Call<CountryResponse> call, Response<CountryResponse> response) { 
      List<Result> results = response.body().getRestResponse().getResult(); 
     } 

     @Override 
     public void onFailure(Call<CountryResponse> call, Throwable t) { 
      Log.e("onFailure", t.getMessage()); 
     } 
}); 

関連する問題