retrofit2获取没有jsonArray名称的json对象

时间:2018-10-19 12:49:13

标签: android

我想使用不带类定义的改型使用jsonobject,结果为null。怎么样?

我有一个带有JSON响应的get查询:

[{"Kuota":"12"}]

这是我的代码获取数据JSONObject。

public void GetKuota(String Key) {
    IBookingService iBookingService = APIClient.getClient().create(IBookingService.class);
    Call<ResponseBody> call = iBookingService.getKuota(Key);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if(!response.isSuccessful()) {
                JSONObject jsonObject;
                try {

                    jsonObject = new JSONObject(response.body().toString());
                     // Log.d(jsonObject.getString("Kuota"));
                     datas =String.valueOf(jsonObject.getInt("Kuota"));

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }

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

        }
    });


}

1 个答案:

答案 0 :(得分:0)

建议:

创建一个模型类,例如 Kuota

public class Kuota {
   public int Kuota;
}

然后像这样重写Retrofit回调。

iBookingService.getKuota(Key).enqueue(new Callback<List<Kuota>>() {
    @Override
    public void onResponse(Call<List<Kuota>> call, Response<List<Kuota>> response) {
        if(response.code() == 200 && response.body() != null) {
              try {

                for(Kuota k: response.body()) {
                    Log.d("Kuota Value" , " " + k.kuota);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

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

    }
});

将iBookingService数据持有者从ResponseBody替换为List

如果未添加,请在设置Retrofit实例时添加JSON序列化器。

      new Retrofit.Builder()
            .......
            .addConverterFactory(GsonConverterFactory.create())
            .build();

并添加依赖项

  implementation 'com.squareup.retrofit2:converter-gson:2.4.0'