我尝试通过向服务器发送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();
});
});
答案 0 :(得分:0)
PHP函数不返回单个对象,它返回一个数组。 所以,你应该期待Android方面的JSONArray。
至于为什么getJSONObject(0)给你一个越界错误,我不确定。 尝试使用调试器查看JSONArray,并查看其中的内容。您可能搜索了不在数据库中的患者ID,并且PHP代码返回了一个空数组。无论如何,你的代码应该检查。
看起来也许“结果”是一个包含数组的JSONObject,在关键字“patient_details”下,在这种情况下,你需要得到“patient_details”的值并索引到该数组中。如果您向我们展示JSON响应,则更容易分辨。