【问题标题】:How to fetch Json data by using retrofit?如何使用改造来获取 Json 数据?
【发布时间】:2017-12-12 05:41:38
【问题描述】:

我是改装新手。我需要获取以下 json 数据。当我运行我的应用程序java.lang.ClassCastException: ad.app.retrofitexample.model.DS cannot be cast to retrofit2.Call

这种类型的异常正在发生。请帮我解决这个问题。我在下面详细解释了我的代码。

 {
    "DS": {
        "LST": [
            {
                "BID": 3,
                "CNM": "kumar",
                "BNO": "BLO41",
                "VID": 1,
                "ETI": 5,
                "FRM": "/Date(1512930840000)/",
                "TOD": "/Date(1513017240000)/",
                "ENM": "Birthday Party",
                "VNM": "murugan hall",
                "CNO": "8888888888",
                "AD1": "ram nagar",
                "AD2": "ram colony",
                "AD3": "polachi",
                "CTN": "Coimbatore",
                "CDT": "/Date(1512799571000)/",
                "ICN": "0",
                "SDT": "10/12/2017",
                "EDT": "11/12/2017"
            }
        ]
    }
}

为此,我使用了 pojo 类

public class DS {
    public DSObj getDsObj() {
        return dsObj;
    }

    public void setDsObj(DSObj dsObj) {
        this.dsObj = dsObj;
    }

    @SerializedName("DS")
    private DSObj dsObj;

}

上述模型类用于访问json对象“DS”。

  public class DSObj {

@SerializedName("LST")
    private List<Booking> list;

    public List<Booking> getList() {
        return list;
    }

    public void setList(List<Booking> list) {
        this.list = list;
    }
}

上面的 DSObj 类正在访问内部的“DS”json 对象。

    public class Booking {

    @SerializedName("CNM")
    String customerName;
    @SerializedName("BNO")
    String bookingNumber;
    @SerializedName("CNO")
    String contactNumber;
    @SerializedName("VNM")
    String venueName;
    @SerializedName("CTN")
    String cityName;
    @SerializedName("VID")
    String vid;

    public String getVenueName() {
        return venueName;
    }

    public void setVenueName(String venueName) {
        this.venueName = venueName;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getBookingNumber() {
        return bookingNumber;
    }

    public void setBookingNumber(String bookingNumber) {
        this.bookingNumber = bookingNumber;
    }

    public String getContactNumber() {
        return contactNumber;
    }

    public void setContactNumber(String contactNumber) {
        this.contactNumber = contactNumber;
    }


    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }


    public String getVid() {
        return vid;
    }

    public void setVid(String vid) {
        this.vid = vid;
    }
}

上述模型类用于访问内部“LST”json数组。

The Api Interface class for retrofit is Kpublic interface ApiInterface {

    String base_url = "http://195.100.1.103/mswed";
            // listVenue
   @GET("/?api=listBlocking&eid=5&vid=1&fdt=9/11/2017&tdt=9/01/2018&uid=1")
    Call<DS> getVenueData();
}

以下代码正在初始化改造并获取数据。

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

    bookingList = (ListView)findViewById(R.id.listData);

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ApiInterface.base_url)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    ApiInterface apiInterface = retrofit.create(ApiInterface.class);
    Call<DS> call = apiInterface.getVenueData();
    call.enqueue(new Callback<DS>() {
        @Override
        public void onResponse(Call<DS> call, Response<DS> response) {

            Call<DS> getList = (Call<DS>) response.body();

            Log.e("Data",getList+"");

        }

        @Override
        public void onFailure(Call<DS> call, Throwable t) {
            Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();

            Log.e("Json Data Error",t.getMessage());
        }
    });

}

当我运行应用程序时抛出异常,我尝试但找不到解决方案。

【问题讨论】:

  • 按照this 教程来消除混淆。

标签: android retrofit2


【解决方案1】:

为了从给定的响应中获取特定的字符串,你应该试试这个。

DS dsList= response.body().getDsObj();
List<Booking> mList= dsList.getList();

mList 中,您可以从 Response 中获取 Array,现在您可以随意使用它。

【讨论】:

  • 太好了,对你有帮助。你可以奖励我的答案,所以其他人也可以使用它。
【解决方案2】:

改变

Call<DS> getList = (Call<DS>) response.body();

DS getList = response.body();

【讨论】:

  • 您的回答有效。是否可以从上面的 JSON 数组中获取单个字符串
  • 你想要什么?你能告诉我一些细节吗?
  • 您的回答解决了我的问题。我怀疑获取的 json 数据是否存储在对象中。现在我需要从存储在对象中的 json 数据列表中获取单个元素
  • 如果你想要简单的字符串,你可以使用response.body().String();
  • 好的,谢谢您的回答
【解决方案3】:

列表 mList=new ArrayList(); mList.addAll(response.body().getDsObj())

从列表中获取

mList.get(position).getCustomerName.toString()

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多