Java httprequesttask返回JSONArray,而不是预期的JSONObject
我试图通过向服务器发送ID来获取患者信息。我希望结果是一个JSONObject,因为只有一个患者与ID对应。然而,我得到的是一个JSONArray。我已尝试执行getJSONObject(0),但它会出现以下错误: 索引0超出范围[0..0] 为什么我是数组而不是对象,以及如何处理它 这是我在活动中的java代码: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"},
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响应,就更容易判断了