【问题标题】:Android - How to get JSON array in ChildAndroid - 如何在 Child 中获取 JSON 数组
【发布时间】:2019-02-28 04:58:36
【问题描述】:

我是Android Studio的初学者,在Android中解析json数据有点困难,所以想问一下关于get或解析JSON子数组的问题。

这是我的代码:

public void resSuccess(String requestType, JSONObject response) 
                       { progressBar.setVisibility(View.GONE);
try {
token = response.getString("token");
JSONArray array = response.getJSONArray("all_airport");
for (int i=0; i<array.length(); i++){
    JSONObject jsonObject = array.getJSONObject(i);
    JSONArray jsonArray = jsonObject.getJSONArray("airport");
    for (int j=0; j<jsonArray.length(); j++) {
        JSONObject object = jsonArray.getJSONObject(j);
        BandaraDataSet bds = new BandaraDataSet();
        idDep = object.getString("country_id");
        bds.setId(object.getString("id"));
        bds.setAirport_name(object.getString("airport_name"));
        bds.setAirport_code(object.getString("airport_code"));
        bds.setCountry_name(object.getString("country_name"));
        bds.setCountry_id(object.getString("country_id"));
        bds.setLocation_name(object.getString("location_name"));
        list.add(bds);
    }
}
bandaraAdapter = new BandaraAdapter(ActivityPesawat.this, list);
bandaraAdapter.notifyDataSetChanged();
listBandara.setAdapter(bandaraAdapter);
} catch (Exception e){
      e.printStackTrace();
}
}

这是我的 Json

{
    "all_airport":{
        "airport":[
                {
                "airport_name":"Mali",
                "airport_code":"ARD",
                "location_name":"Alor Island",
                "country_id":"id",
                "country_name":"Indonesia"
                },
                {
                "airport_name":"Pattimura",
                "airport_code":"AMQ",
                "location_name":"Ambon",
                "country_id":"id",
                "country_name":"Indonesia"
                },
                {
                "airport_name":"Tanjung Api",
                "airport_code":"VPM",
                "location_name":"Ampana",
                "country_id":"id",
                "country_name":"Indonesia"
                }
            ]
        },
    "token":"ab4f5e12e794ab09d49526bc75cf0a0139d9d849",
    "login":"false"
}

所以当 Parse Json 在 Android 中为空时我的问题,请帮助任何人..

【问题讨论】:

  • Android Studio 是一个软件,而不是一种编程语言。
  • 哦,对不起,我的意思是 java 语言,我在 android studio 中开发
  • 你试图获得什么价值,所以我可以写你和如何解析/获取它的例子?
  • 感谢回复,首先我想获取token对象,然后我想从机场获取数组的内容

标签: android json android-volley gson


【解决方案1】:

您正在处理JSONObject,就好像它是JSONArray。试试这个代码:

public void resSuccess(String requestType, JSONObject response) { 
    progressBar.setVisibility(View.GONE);
    try {
        token = response.getString("token");
        JSONObject airports = response.getJSONObject("all_airport");

        JSONArray airportArray = airports.getJSONArray("airport");
        for (int j = 0; j < airportArray.length(); j++) {
            BandaraDataSet bds = new BandaraDataSet();
            JSONObject object = airportArray.getJSONObject(j);
            idDep = object.getString("country_id");
            bds.setId(object.getString("id"));
            bds.setAirport_name(object.getString("airport_name"));
            bds.setAirport_code(object.getString("airport_code"));
            bds.setCountry_name(object.getString("country_name"));
            bds.setCountry_id(object.getString("country_id"));
            bds.setLocation_name(object.getString("location_name"));
            list.add(bds);
        }

        bandaraAdapter = new BandaraAdapter(ActivityPesawat.this, list);
        bandaraAdapter.notifyDataSetChanged();
        listBandara.setAdapter(bandaraAdapter);
    } catch (Exception e){
        e.printStackTrace();
    }
}

【讨论】:

    【解决方案2】:

    您应该正确解析 json,或者您可以使用 Gson(library) 进行 json 解析。你只需要有适当的模型(豆)类。然后解析就太容易了。

    编译'com.google.code.gson:gson:2.7'

    在下面创建模型/Bean 类

    import java.io.Serializable;
    
    //Response.java
    
    public class Response implements Serializable {
    
        AllAirPort all_airport;
    
        public AllAirPort getAll_airport() {
            return all_airport;
        }
    
        public void setAll_airport(AllAirPort all_airport) {
            this.all_airport = all_airport;
        }
    }
    
    //AllAirPort.java
    
    public class AllAirPort implements Serializable{
    
        ArrayList<AirportModel> airport;
    
        public ArrayList<AirportModel> getAirport() {
            return airport;
        }
    
        public void setAirport(ArrayList<AirportModel> airport) {
            this.airport = airport;
        }
    }
    
        //AirportModel.java
    
        public class AirportModel implements Serializable {
    
            String airport_name;
            String airport_code;
    
    
      String location_name;
        String country_id;
        String country_name;
    
        public String getAirport_name() {
            return airport_name;
        }
    
        public void setAirport_name(String airport_name) {
            this.airport_name = airport_name;
        }
    
        public String getAirport_code() {
            return airport_code;
        }
    
        public void setAirport_code(String airport_code) {
            this.airport_code = airport_code;
        }
    
        public String getLocation_name() {
            return location_name;
        }
    
        public void setLocation_name(String location_name) {
            this.location_name = location_name;
        }
    
        public String getCountry_id() {
            return country_id;
        }
    
        public void setCountry_id(String country_id) {
            this.country_id = country_id;
        }
    
        public String getCountry_name() {
            return country_name;
        }
    
        public void setCountry_name(String country_name) {
            this.country_name = country_name;
        }
    }
    

    响应 responseObject = new Gson().fromJson(yourstringResponse, Response.class);

    现在您可以开始从 responseObject 获取数据了。

    【讨论】:

    • 是的,请为我解释一下,我有一个模型类(BandaraDataSet),我使用 Volley 库,但解析时为空,
    • @ArshdeepSingh:在您发帖时,最好是:implementation 'com.google.code.gson:gson:2.8.2'compile 已弃用,lib 为 2.8.2。
    • 可以用凌空解析吗?我不习惯使用 Gson
    • @DayatSan,不要使用 gson。它非常有用的库。我使用改造代替凌空抽射。通过改造,我使用 Gson。如果你是安卓开发者,那么有一天你将不得不使用 Gson。
    • @DayatSan 我已经编辑了我的答案来解释我。如果有任何疑问,你可以问我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2016-03-03
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    相关资源
    最近更新 更多