Java JSON和Android Studio

Java JSON和Android Studio,java,android,json,Java,Android,Json,我的API: 我在android studio上的代码: private class GetDistance extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... arg0) { HttpHandler sh = new HttpHandler(); String jsonStr = sh.makeServiceCa

我的API:

我在android studio上的代码:

private class GetDistance extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... arg0) {

        HttpHandler sh = new HttpHandler();
        String jsonStr = sh.makeServiceCall("http://maps.googleapis.com/maps/api/distancematrix/json?origins=45.067381,%202.988574&destinations=45.067381,%202.988574&mode=driving&language=en-US&sensor=false");

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);
                JSONObject contacts = jsonObj.getJSONObject("rows");

                JSONArray childrenArray = contacts.getJSONArray("elements");


                for (int i = 0; i < childrenArray.length(); i++) {



                    JSONObject childrenData  = childrenArray.getJSONObject(i);






                    String json_distance = childrenData.getString("status");


                    test58 = json_distance;



                }
            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Json parsing error: " + e.getMessage(),
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }
        } else {}
        return null;
    }
私有类GetDistance扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…arg0){
HttpHandler sh=新的HttpHandler();
字符串jsonStr=sh.makeServiceCall(“http://maps.googleapis.com/maps/api/distancematrix/json?origins=45.067381,%202.988574&目的地=45.067381,%202.988574&模式=driving&语言=en-US&传感器=false”);
if(jsonStr!=null){
试一试{
JSONObject jsonObj=新的JSONObject(jsonStr);
JSONObject contacts=jsonObj.getJSONObject(“行”);
JSONArray childrenArray=contacts.getJSONArray(“元素”);
对于(int i=0;i
错误:Json解析错误:类型为org.Json.JSONArray的行上的值[{“元素”:[{“距离”:{“文本”:“1米”,“值”:0},“持续时间”:{“文本”:“1分钟”,“值”:0},“状态”:“OK”}]}]无法转换为JSONObject

如何访问行->元素->距离->文本

谢谢。

我的新代码:

if (jsonStr != null) {
            try {

                JSONObject object = new JSONObject(jsonStr);


                JSONArray rows = object.getJSONArray("rows");

                JSONArray elements = rows.getJSONArray("elements");

                JSONObject distance = elements.getJSONObject("distance");

                test58 = distance.getString("text");



            }
行.getJSONArray(“元素”)和元素.getJSONObject(“距离”)出错


JsonArray中的getJsonArray(int)不能应用于(java.lang.string)
JSONObject contacts=JSONObject.getJSONObject(“行”);

键“rows”返回一个数组,而不是一个对象

将上述语句更改为

JSONArray行数组=jsonObj.getJSONArray(“行”);

现在选择rowArray数组中的第一个元素

从该对象获取与键元素关联的数组

JSONArray elementArray=firstRow.getJSONArray(“元素”);

那么


这是一个想法

    @Override
    protected Void doInBackground(Void... params) {
        System.out.println("Menu doInBackground");
        ParseJson parseJson = new ParseJson(); 
        JSONObject jsonObject = parseJson.getJsonFromURL("YOUR LINK");
        try {
            JSONArray jsonArray = jsonObject.getJSONArray("rows");
            for (int i = 0; i < jsonArray.length(); i++) {
               JSONObject jsonObjectRow = jsonArray.getJSONObject(i);
               for(int j= 0; j< jsonObjectRow; j++){
                JSONObject jsonObjectElements = jsonArray.getJSONObject(j);
                ....
                for(int k = 0; k< jsonObjectElements; k++){
                JSONObject jsonObjectDistance = jsonArray.getJSONObject(j);
                ...

                }

               }

            }
        } catch (JSONException e) {
        }
        return null;
    }
@覆盖
受保护的Void doInBackground(Void…参数){
System.out.println(“菜单doInBackground”);
ParseJson ParseJson=新的ParseJson();
JSONObject JSONObject=parseJson.getJsonFromURL(“您的链接”);
试一试{
JSONArray JSONArray=jsonObject.getJSONArray(“行”);
for(int i=0;i
你的模型

public class MyModel{
    private String[] destinationAddress;
    private String[] originAddresses;
    private List<Row> listRow;
    private String status;


        public  class Row{
            private String estatus;
            private List<Elements> listElements;


            public class Elements{
                private List<Distance> distance;

                public class Distance {
                    private String text;
                    private int value;

                    public Distance(String text, int value) {
                        this.text = text;
                        this.value = value;
                    }

                    public String getText() {
                        return text;
                    }

                    public void setText(String text) {
                        this.text = text;
                    }

                    public int getValue() {
                        return value;
                    }

                    public void setValue(int value) {
                        this.value = value;
                    }
                }

                public Elements(List<Distance> distance) {
                    this.distance = distance;
                }

                public List<Distance> getDistance() {
                    return distance;
                }

                public void setDistance(List<Distance> distance) {
                    this.distance = distance;
                }
            }

            public Row(String estatus, List<Elements> listElements) {
                this.estatus = estatus;
                this.listElements = listElements;
            }

            public String getEstatus() {
                return estatus;
            }

            public void setEstatus(String estatus) {
                this.estatus = estatus;
            }

            public List<Elements> getListElements() {
                return listElements;
            }

            public void setListElements(List<Elements> listElements) {
                this.listElements = listElements;
            }
        }
        public MyModel(String[] destinationAddress, String[] originAddresses, List<Row> listRow, String status) {
            this.destinationAddress = destinationAddress;
            this.originAddresses = originAddresses;
            this.listRow = listRow;
            this.status = status;
        }

        public String[] getDestinationAddress() {
            return destinationAddress;
        }

        public void setDestinationAddress(String[] destinationAddress) {
            this.destinationAddress = destinationAddress;
        }

        public String[] getOriginAddresses() {
            return originAddresses;
        }

        public void setOriginAddresses(String[] originAddresses) {
            this.originAddresses = originAddresses;
        }

        public List<Row> getListRow() {
            return listRow;
        }

        public void setListRow(List<Row> listRow) {
            this.listRow = listRow;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }
    }
公共类MyModel{
私有字符串[]目的地址;
私有字符串[]原始地址;
私有列表列表行;
私有字符串状态;
公共类行{
私有字符串资产;
私人名单;
公共类要素{
私有列表距离;
公共类距离{
私有字符串文本;
私有int值;
公共距离(字符串文本,int值){
this.text=文本;
这个值=值;
}
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
public int getValue(){
返回值;
}
公共无效设置值(int值){
这个值=值;
}
}
公共元素(列表距离){
这个距离=距离;
}
公共列表getDistance(){
返回距离;
}
公共空隙设置距离(列表距离){
这个距离=距离;
}
}
公共行(字符串状态,列表元素){
this.estatus=estatus;
this.listElements=listElements;
}
公共字符串getEstatus(){
归还遗产;
}
公共无效集合状态(字符串状态){
this.estatus=estatus;
}
公共列表getListElements(){
返回列表元素;
}
公共void setListElements(列表listElements){
this.listElements=listElements;
}
}
公共MyModel(字符串[]目的地址、字符串[]原始地址、列表列表行、字符串状态){
this.destinationAddress=destinationAddress;
this.originAddresses=originAddresses;
this.listRow=listRow;
这个状态=状态;
}
公共字符串[]getDestinationAddress(){
返回目的地地址;
}
public void setDestinationAddress(字符串[]destinationAddress){
th
    @Override
    protected Void doInBackground(Void... params) {
        System.out.println("Menu doInBackground");
        ParseJson parseJson = new ParseJson(); 
        JSONObject jsonObject = parseJson.getJsonFromURL("YOUR LINK");
        try {
            JSONArray jsonArray = jsonObject.getJSONArray("rows");
            for (int i = 0; i < jsonArray.length(); i++) {
               JSONObject jsonObjectRow = jsonArray.getJSONObject(i);
               for(int j= 0; j< jsonObjectRow; j++){
                JSONObject jsonObjectElements = jsonArray.getJSONObject(j);
                ....
                for(int k = 0; k< jsonObjectElements; k++){
                JSONObject jsonObjectDistance = jsonArray.getJSONObject(j);
                ...

                }

               }

            }
        } catch (JSONException e) {
        }
        return null;
    }
public class MyModel{
    private String[] destinationAddress;
    private String[] originAddresses;
    private List<Row> listRow;
    private String status;


        public  class Row{
            private String estatus;
            private List<Elements> listElements;


            public class Elements{
                private List<Distance> distance;

                public class Distance {
                    private String text;
                    private int value;

                    public Distance(String text, int value) {
                        this.text = text;
                        this.value = value;
                    }

                    public String getText() {
                        return text;
                    }

                    public void setText(String text) {
                        this.text = text;
                    }

                    public int getValue() {
                        return value;
                    }

                    public void setValue(int value) {
                        this.value = value;
                    }
                }

                public Elements(List<Distance> distance) {
                    this.distance = distance;
                }

                public List<Distance> getDistance() {
                    return distance;
                }

                public void setDistance(List<Distance> distance) {
                    this.distance = distance;
                }
            }

            public Row(String estatus, List<Elements> listElements) {
                this.estatus = estatus;
                this.listElements = listElements;
            }

            public String getEstatus() {
                return estatus;
            }

            public void setEstatus(String estatus) {
                this.estatus = estatus;
            }

            public List<Elements> getListElements() {
                return listElements;
            }

            public void setListElements(List<Elements> listElements) {
                this.listElements = listElements;
            }
        }
        public MyModel(String[] destinationAddress, String[] originAddresses, List<Row> listRow, String status) {
            this.destinationAddress = destinationAddress;
            this.originAddresses = originAddresses;
            this.listRow = listRow;
            this.status = status;
        }

        public String[] getDestinationAddress() {
            return destinationAddress;
        }

        public void setDestinationAddress(String[] destinationAddress) {
            this.destinationAddress = destinationAddress;
        }

        public String[] getOriginAddresses() {
            return originAddresses;
        }

        public void setOriginAddresses(String[] originAddresses) {
            this.originAddresses = originAddresses;
        }

        public List<Row> getListRow() {
            return listRow;
        }

        public void setListRow(List<Row> listRow) {
            this.listRow = listRow;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }
    }