首页 > 解决方案 > 应用程序未从改造 api 获取所有数据

问题描述

我从https://www.simplifiedcoding.net/retrofit-android-example/完成了 turial 我想创建自己的调用,我想从 API 获取最新的货币兑换,但我遇到了一个问题(我想是的就是这样)和我的模型课。我已经更改了一些代码,并且我收到了“基础”和“日期”的数据,但是当我试图获得一些货币价值时(让我们以 BGN 为例)程序显示我总是 0.0。我该如何解决?我对那个模型课是对的吗?有问题吗?

模型

public class Model  {
private String base,date;
private double BGN;

public Model(String base, String date, double BGN) {
    this.base = base;
    this.date = date;
    this.BGN = BGN;
}

public String getBase() {
    return base;
}

public String getDate() {
    return date;
}
public double getBGN() {
    return BGN;
 }
}


Api (interface)

public interface Api {

String BASE_URL = "https://api.exchangeratesapi.io/";

@GET("latest")
Call<Model> getCurrency();
}

主要活动

public class MainActivity extends AppCompatActivity {

private TextView textViewResult;

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

    textViewResult = (TextView) findViewById(R.id.label);

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Api.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    Api api = retrofit.create(Api.class);
    Call<Model> call = api.getCurrency();
    call.enqueue(new Callback<Model>() {
        @Override
        public void onResponse(Call<Model> call, Response<Model> response) {

            List<Model> currencyList = Collections.singletonList(response.body());

            for (Model currency : currencyList) {
                String content = "";
                content += "Base: " + currency.getBase() + "\n";
                content += "Date: " + currency.getDate() + "\n";
                content += "BGN: " + currency.getBGN() + "\n";
                textViewResult.append(content);
            }
        }
        @Override
        public void onFailure(Call<Model> call, Throwable t) {
            Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();

        }
    });
 }
}

标签: javaandroidretrofitretrofit2

解决方案


要从改造中获取所有数据,您需要两个 POJO 类。它们需要像这样,您可以在其中为所需的所有速率添加方法和变量:

public class Model {
 private String base;
 private String date;
 Rates RatesObject;


 // Getter Methods 

 public String getBase() {
  return base;
 }

 public String getDate() {
  return date;
 }

 public Rates getRates() {
  return RatesObject;
 }

 // Setter Methods 

 public void setBase(String base) {
  this.base = base;
 }

 public void setDate(String date) {
  this.date = date;
 }

 public void setRates(Rates ratesObject) {
  this.RatesObject = ratesObject;
 }
}


public class Rates {
 private float CAD;
 private float CHF;
 private float GBP;
 private float SEK;
 private float EUR;
 private float USD;


 // Getter Methods 

 public float getCAD() {
  return CAD;
 }

 public float getCHF() {
  return CHF;
 }

 public float getGBP() {
  return GBP;
 }

 public float getSEK() {
  return SEK;
 }

 public float getEUR() {
  return EUR;
 }

 public float getUSD() {
  return USD;
 }

 // Setter Methods 

 public void setCAD(float CAD) {
  this.CAD = CAD;
 }

 public void setCHF(float CHF) {
  this.CHF = CHF;
 }

 public void setGBP(float GBP) {
  this.GBP = GBP;
 }

 public void setSEK(float SEK) {
  this.SEK = SEK;
 }

 public void setEUR(float EUR) {
  this.EUR = EUR;
 }

 public void setUSD(float USD) {
  this.USD = USD;
 }
}

推荐阅读