【问题标题】:How to retrieve objects with different names from the same url using Retrofit如何使用 Retrofit 从同一 url 检索具有不同名称的对象
【发布时间】:2018-04-08 21:19:55
【问题描述】:

我正在使用 Retrofit 来从 API 中检索数据。这是网址http://mindicador.cl/api,我需要检索名称为“uf”、“dolar”、“euro”和“utm”的对象,所有这四个都在一次调用中。这是我基于 json 的 Java 类。

public class IEconomicoAPI {
    private String version;
    private String autor;
    private String fecha;
    @SerializedName(value = "uf", alternate = {"dolar", "euro", "utm"})
    private IEconomicoObject uf;

    /* All Getter and Setter methods */
}

这是我的调用方法来检索现在不工作的数据。

void call() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(MiIndicadorAPI.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        MiIndicadorAPI api = retrofit.create(MiIndicadorAPI.class);

        final Call<IEconomicoAPI> iEconomicoAPICall = api.getAPI();
        iEconomicoAPICall.enqueue(new Callback<IEconomicoAPI>() {
            @Override
            public void onResponse(Call<IEconomicoAPI> call, Response<IEconomicoAPI> response) {
                String codigo = response.body().getUf().getCodigo();
                if (codigo.equals("uf")) {
                    Log.e("info", "nombre: " + response.body().getUf().getNombre());
                }
            }

            @Override
            public void onFailure(Call<IEconomicoAPI> call, Throwable t) {

            }
        });
    }

我正在考虑创建 4 个对象(一个用于 uf、dolar、euro 和 utm)的解决方案,但我认为是多余的,因为所有这些对象都具有相同的字段,更方便的方法应该是只创建一个对象。无论如何,我希望你指导我如何解决这个问题。感谢您的提前。

【问题讨论】:

    标签: android json retrofit retrofit2


    【解决方案1】:

    你需要有 4 个不同的变量

    private IEconomicoObject uf;
    private IEconomicoObject dollar;
    private IEconomicoObject euro;
    private IEconomicoObject utm;
    

    但理想情况下,我建议将 API 响应更改为类似的内容

    {
        "version": "1.5.0",
        "autor": "mindicador.cl",
        "fecha": "2018-04-08T21:00:00.000Z",
        "iEconomicoList": [
            {
                "codigo": "uf",
                "nombre": "Unidad de fomento (UF)",
                "unidad_medida": "Pesos",
                "fecha": "2018-04-08T04:00:00.000Z",
                "valor": 26966.89
            },{
                "codigo": "ivp",
                "nombre": "Indice de valor promedio (IVP)",
                "unidad_medida": "Pesos",
                "fecha": "2018-04-08T04:00:00.000Z",
                "valor": 28088.63
            }
        ]
    }
    

    在这种情况下,模型可以是

    public class IEconomicoAPI {
        private String version;
        private String autor;
        private String fecha;
        private List<IEconomicoObject> iEconomicoList;;
    
        /* All Getter and Setter methods */
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 2020-05-10
      • 1970-01-01
      • 2019-05-27
      • 2016-01-04
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多