Java httprequesttask返回JSONArray,而不是预期的JSONObject

Java httprequesttask返回JSONArray,而不是预期的JSONObject,java,android,arrays,json,database,Java,Android,Arrays,Json,Database,我试图通过向服务器发送ID来获取患者信息。我希望结果是一个JSONObject,因为只有一个患者与ID对应。然而,我得到的是一个JSONArray。我已尝试执行getJSONObject(0),但它会出现以下错误: 索引0超出范围[0..0] 为什么我是数组而不是对象,以及如何处理它 这是我在活动中的java代码: new HttpRequestTask( "getPatientFull", new String[]{"ID"},

我试图通过向服务器发送ID来获取患者信息。我希望结果是一个JSONObject,因为只有一个患者与ID对应。然而,我得到的是一个JSONArray。我已尝试执行getJSONObject(0),但它会出现以下错误: 索引0超出范围[0..0]

为什么我是数组而不是对象,以及如何处理它

这是我在活动中的java代码:

new HttpRequestTask(
            "getPatientFull",
            new String[]{"ID"},
            new String[]{PatientID}, new HttpRequestTask.ResultReceiver() {
        @Override
        public void processResult(String apiFunctionName, JSONObject result) {
            if (result != null) {
                try {
                    if (result.has("error")) {
                        shorttoast("ERROR: " + result.getString("error") + "saving patient file");
                    } else {
                        if (result.has("patient_details")) {
                            patientName = result.getJSONArray("patient_details").getJSONObject(0).getString("NAME");
                            shorttoast(patientName);
                    }
                    }
                } catch (JSONException ex) {
                    shorttoast("ERROR" + ex.getLocalizedMessage());
                }
            } else
                shorttoast("Retreiving failed");
        }
    }).execute();
PatientID在代码的前面定义(它是一个现有的患者id)

这是我的老师定义的php API函数:

 app.post("/getPatientFull", function (req, res) {
    pool.getConnection(function (err, connection) {
        connection.query('SELECT * FROM PatientDossier WHERE PATIENT_ID=?',
            [req.query.ID],
            function (error, results, fields) {
                if (error) {
                    res.status(403).json({"error": error.code});
                } else {
                    res.status(200).json({patient_details:results});
                }
            });
        connection.release();
    });
});

PHP函数不返回单个对象,而是返回一个数组。 因此,您应该期待Android端出现JSONArray

至于为什么getJSONObject(0)会给您一个越界错误,我不确定。 尝试使用调试器查看JSONArray,并查看其中的内容。可能是您搜索了数据库中不存在的患者id,PHP代码返回了一个空数组。您的代码无论如何都应该进行检查

看起来“result”可能是一个包含数组的JSONObject,在键“patient_details”下,在这种情况下,您需要获取“patient_details”的值并将其索引到该数组中。如果您向我们显示JSON响应,就更容易判断了