You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用从WebService取JSON填充ListView失败,报JSON转换异常

问题分析与解决方案

从你的Logcat日志里一眼就能揪出核心问题:

org.json.JSONException: Value {"orders":[{"naam":"P. Melissen",...}]} of type org.json.JSONObject cannot be converted to JSONArray

说白了,你的WebService返回的是一个包裹着数组的JSONObject(根节点是{}),但你代码里直接把它当成纯JSONArray([])来解析了,这就是数据加载失败的根本原因。

另外还有个容易忽略的小细节:你代码里用jo.getString("Naam")取数据,但WebService返回的JSON键是小写的naam,这也会导致取不到对应的值。

修正步骤

1. 修复JSON解析逻辑

把原来直接解析JSONArray的代码,改成先解析根JSONObject,再取出里面的orders数组:

private void MPWebservice() {
    String Webadres = null;
    String dbResult = "empty";
    dbConnect database = new dbConnect(this);
    try{
        String query = "SELECT * FROM adres";
        Webadres = "?query=" + URLEncoder.encode(query, "UTF-8");
        String con = "https://amje.000webhostapp.com/mariosPizzaJSON.php" + Webadres;
        dbResult = database.execute(con).get();
    } catch (Exception e){
        e.printStackTrace();
    }
    try{
        // 第一步:先解析根节点的JSONObject
        JSONObject rootJsonObject = new JSONObject(dbResult);
        // 第二步:取出里面的orders数组
        JSONArray ja = rootJsonObject.getJSONArray("orders");
        JSONObject jo = null;
        data = new String[ja.length()];
        for (int i = 0; i < ja.length(); i++){
            jo = ja.getJSONObject(i);
            // 注意这里的键是小写的"naam",和WebService返回的字段名完全一致
            data[i] = jo.getString("naam");
        }
        adapter = new ArrayAdapter<String>(this, R.layout.layout_list, R.id.list_item, data);
        listview.setAdapter(adapter);
    } catch (Exception e){
        e.printStackTrace();
    }
}

2. 优化提示(非必需但建议)

你当前用database.execute(con).get()的方式会阻塞主线程,虽然StrictMode暂时允许,但在实际应用中可能导致界面卡顿。建议改用AsyncTask的onPostExecute回调来处理结果,或者考虑使用更现代的网络库(比如Retrofit、OkHttp)来简化网络请求和JSON解析。

验证效果

修改后重新运行应用,应该就能正确解析WebService返回的JSON数据,并且把naam字段内容填充到ListView里了。

内容的提问来源于stack exchange,提问作者acesteef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:56