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

时间:2017-03-31 10:54:34

标签: java android arrays json database

我尝试通过向服务器发送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();
    });
});

1 个答案:

答案 0 :(得分:0)

PHP函数不返回单个对象,它返回一个数组。 所以,你应该期待Android方面的JSONArray。

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

看起来也许“结果”是一个包含数组的JSONObject,在关键字“patient_details”下,在这种情况下,你需要得到“patient_details”的值并索引到该数组中。如果您向我们展示JSON响应,则更容易分辨。