尝试解析Overpass API / OpenStreetMap ||中的JSON数据时出错Android的

时间:2015-03-15 22:22:49

标签: java android json parsing openstreetmap

我目前正在开发一个Android应用程序,它返回某个位置的速度限制。通过查询Overpass API,返回下面的JSON数据。 通过运行下面的代码我收到一个错误,说明:

Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject

考虑到标题,任何人都知道返回的数据是否真的是JSON? 我很乐意帮助你。

查询:

private static final String OVERPASS_API = "http://www.overpass-api.de/api/interpreter";
    String query = "?data=[out:json];way (around:20, 54.950980649739634, -7.721457478884304)[\"highway\"];(  ._;  node(w););out;";
encodedQuery = URLEncoder.encode(query, "UTF-8");
            submission = OVERPASS_API+encodedQuery;

活动和ASync任务中的Java代码:

 @Override
    protected Void doInBackground(String... params) {

        //String url_select = "http://yoururlhere.com";

        ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();

        try {
            // Set up HTTP post

            // HttpClient is more then less deprecated. Need to change to URLConnection
            HttpClient httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(submission);
            httpPost.setEntity(new UrlEncodedFormEntity(param));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();

            // Read content & Log
            inputStream = httpEntity.getContent();
        } catch (UnsupportedEncodingException e1) {
            Log.e("UnsupportedEncodingException", e1.toString());
            e1.printStackTrace();
        } catch (ClientProtocolException e2) {
            Log.e("ClientProtocolException", e2.toString());
            e2.printStackTrace();
        } catch (IllegalStateException e3) {
            Log.e("IllegalStateException", e3.toString());
            e3.printStackTrace();
        } catch (IOException e4) {
            Log.e("IOException", e4.toString());
            e4.printStackTrace();
        }
        // Convert response to string using String Builder
        try {
            BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
            StringBuilder sBuilder = new StringBuilder();

            String line = null;
            while ((line = bReader.readLine()) != null) {
                sBuilder.append(line + "\n");
            }

            inputStream.close();
            result = sBuilder.toString();

        } catch (Exception e) {
            Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString());
        }
        return null;
    } // protected Void doInBackground(String... params)

    protected void onPostExecute(Void v) {
        //parse JSON data
        try {
            JSONArray jArray = new JSONArray(result);    
            for(int i=0; i < jArray.length(); i++) {

                JSONObject jObject = jArray.getJSONObject(i);

                String speedLimit = jObject.getString("maxspeed");
                txtSpeed.setText(speedLimit);
            } // End Loop

            this.progressDialog.dismiss();

        } catch (JSONException e) {
            Log.e("JSONException", "Error: " + e.toString());
        } // catch (JSONException e)
    } // protected void onPostExecute(Void v)

请求返回的数据:

{
  "version": 0.6,
  "generator": "Overpass API",
  "osm3s": {
    "timestamp_osm_base": "2015-03-15T22:13:02Z",
    "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
  },
  "elements": [
{
  "type": "node",
  "id": 2673934802,
  "lat": 54.9498543,
  "lon": -7.7177617
},
{
  "type": "way",
  "id": 64273241,
  "nodes": [
    768053039,
    1922602861,
    1922622063,
    795319854,
    795320324
  ],
  "tags": {
    "highway": "secondary",
    "maxspeed": "60",
    "name": "Port Road",
    "oneway": "no",
    "ref": "R229"
  }
},
{
  "type": "way",
  "id": 64887990,
  "nodes": [
    795320324,
    1922546679,
    1922546572,
    1922546692,
    2673934802,
    768053040,
    768053041,
    768053043,
    768053044,
    791492493
  ],
  "tags": {
    "highway": "secondary",
    "maxspeed": "60",
    "name": "Port Road",
    "oneway": "no",
    "ref": "R229"
  }
}

  ]
}

0 个答案:

没有答案