当使用Retrofit Library获取数据android时,如何处理JSON中缺少的键

时间:2016-01-14 13:39:42

标签: android json gson retrofit

我使用高效的改造库来获取数据。我通过api获得的json如下所示:

[
{
    "doctor_detail": [
        {
            "experience_years": null,
            "clinic": [
                {
                    "price": 163,
                    "main_facility": {
                        "name": "West Delhi Dental Clinic",
                        "address": {
                            "mobile": "+911166107201",
                            "latitude": null,
                            "longitude": null,
                            "locality": {
                                "city": {
                                    "name": "Delhi"
                                },
                                "name": "Janak Puri"
                            }
                        }
                    }
                }
            ],
            "specialities": [
                {
                    "name": "Dentist",
                    "slug": "dentist"
                }
            ],
            "owner": {
                "first_name": "Bhudev",
                "last_name": "Sharma",
                "middle_name": null
            },
            "logo": [],
            "doctor_id": "286207",
            "education": []
        },
        {
            "experience_years": null,
            "clinic": [],
            "specialities": [],
            "owner": {
                "first_name": "Hema",
                "last_name": "Anand",
                "middle_name": null
            },
            "logo": [],
            "doctor_id": "12137",
            "education": []
        }
    ]
},
{
    "last_page": 2
},
{
    "title": "dentist"
}]

在json的第一个对象中,我得到一个带有关键doctor_detail的数组,在第一个对象中有两个对象我得到一个数组,其中关键诊所有价格键,数组main_facility有一些其他键,如姓名,地址。

但是在doctor_detail的第二个对象中,我得到了相同的诊所密钥,但是由于这个问题,我没有在诊所里面有任何关键错误:

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
            at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
当我要从RecyclerAdapter获得第二个对象的价格时,在ArrayList<String> mPriceArrayList

所以请告诉我是否有办法解决这类问题。 谢谢

2 个答案:

答案 0 :(得分:1)

最后我得到了答案这是由于错误的json。它无法处理。

答案 1 :(得分:0)

亲爱的拉维,我认为不是你的问题,你的JSON错了,但仍然 您可以通过在适配器中使用try-catch块来处理它,您将获得ArrayIndexOutOfBounds Exception,并且您可以在catch块中的文本视图中设置任何您没有获得键的值:

    try{
  mPriceTextView.setText(mPriceArrayList.get(getAdapterPosition()));
}catch(Exception oe){
  mPriceTextView.setText("price is missing");
}