2017-05-16 6 views
0

私は単純なAPIを使用します:http://api.nbp.pl/api/exchangerates/rates/a/chf/ MID値を取得するには、私は常に0.0を返します。 私は2クラスを生成するためのJSON generatatorを使用します(私はSerializableの名前を追加しようとするが、それは私の問題を解決していない)Android Retrofitはオブジェクトにnullを返します

public class Rater 
{ 
    private String no; 

    public String getNo() { return this.no; } 

    public void setNo(String no) { this.no = no; } 

    private String effectiveDate; 

    public String getEffectiveDate() { return this.effectiveDate; } 

    public void setEffectiveDate(String effectiveDate) { this.effectiveDate = effectiveDate; } 

    private double mid; 

    public double getMid() { return this.mid; } 

    public void setMid(double mid) { this.mid = mid; } 
} 

public class RootObject 
{ 
    private String table; 

    public String getTable() { return this.table; } 

    public void setTable(String table) { this.table = table; } 

    private String currency; 

    public String getCurrency() { return this.currency; } 

    public void setCurrency(String currency) { this.currency = currency; } 

    private String code; 

    public String getCode() { return this.code; } 

    public void setCode(String code) { this.code = code; } 

    private ArrayList<Rater> raters; 

    public ArrayList<Rater> getRaters() { return this.raters; } 

    public void setRaters(ArrayList<Rater> raters) { this.raters = raters; } 
} 

とシンプルなインターフェース:メインで

public interface RaterAPI { 

    String baseUrl = "http://api.nbp.pl/"; 

     @GET("api/exchangerates/rates/a/chf/")Call<Rater> getRater(); 


    class Factory { 
     public static RaterAPI service; 

     public static RaterAPI getInstance() { 

      if (service == null) { 
       Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()) 
         .baseUrl(baseUrl) 
         .build(); 
       service = retrofit.create(RaterAPI.class); 
       return service; 
      } else { 
       return service; 
      } 
     } 
    } 
} 

public class MainActivity extends AppCompatActivity { 

    @BindView(R.id.btnStart) 
    Button btnStart; 
    @BindView(R.id.tvRate) 
    TextView tvRate; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 
    } 

    @OnClick(R.id.btnStart) 
    public void setBtnStart() { 

     RaterAPI.Factory.getInstance().getRater().enqueue(new Callback<Rater>() { 
      @Override 
      public void onResponse(Call<Rater> call, Response<Rater> response) { 
       tvRate.setText(Double.toString(response.body().getMid())); 

      } 

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

私は間違いを犯し、コールバックで不正なクラスを使用しようとしました。 –

答えて

0

それは私の問題を解決します:

RaterAPI.Factory.getInstance().getRater().enqueue(new Callback<RootObject>() { 
      @Override 
      public void onResponse(Call<RootObject> call, Response<RootObject> response) { 
       tvRate.setText(Double.toString(response.body().getRates().get(0).getMid())); 
      } 
関連する問題