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());
}
});
}
}
私は間違いを犯し、コールバックで不正なクラスを使用しようとしました。 –