我知道如何通过JSON从MySQL数据库到我的Android-App获取值,单行或多行。但是如何在结果中添加一个值,告诉我查询是否正常,而不是,添加错误代码之类的东西?
这是我的代码: PHP
$result = mysqli_query($con,"SELECT Role, age FROM table1");
$json = array();
while($row = mysqli_fetch_array($result)){
$json[] = $row;
}
mysqli_close($con);
print json_encode($json);
的Android
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","age: " + json_data.getString("age") +
", role: "+json_data.getString("Role"));
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
现在,例如,如果数据库中没有任何用户,则查询不成功。 在这种情况下,我想得到一个错误,错误的东西,如错误代码,告诉我,实际上是什么错误。否则我得到一个&#34; OK-Message&#34;结果。 我怎么能这样做?
我知道这个例子我可以通过计算Android应用程序中的值来做到这一点,但我需要更复杂的东西,比如注册表单中的错误。
我希望你明白我的意思:) 谢谢!
答案 0 :(得分:1)
首先,定义JSON架构/结构 - 这是API的一部分,合同应记录。在此之后,大多数事情都将“适应”,并成为基本编程的练习。
例如,请考虑此合同定义;
{
status: - string of "success" or "fail"
errorMessage: - optional, an error message
results: [..] - array of results (always empty on non-OK status), where
- each result is an array of the form [role, age]
}
然后创建JSON结果 fit 合同;
$result = mysqli_query($con,"SELECT Role, age FROM table1");
$resp = array();
if ($result) {
// Good, also add results
$resp["status"] = "success";
$results = array();
while($row = mysqli_fetch_array($result)){
$results[] = $row;
}
$resp["results"] = $results;
} else {
// No good!
$resp["status"] = "fail";
$resp["errorMessage"] = "Database query failed";
// Or if this is desired to be exposed (only for development!)
// $resp["errorMessage"] = mysqli_error($con);
// No results, but keep empty JSON array to make JSON access more consistent
$resp["results"] = array();
}
mysqli_close($con);
print json_encode($resp);
然后更新Android客户端以接受这个新的JSON结构。需要调整它以包含一个额外的级别,首先检查status
(它是“成功”吗?)。如果没问题,请使用results
数组。如果不显示errorMessage
或以其他方式通知用户该问题。另请注意,即使未返回任何结果,查询也可能是“成功”。
仅时间应抛出异常,如果JSON 错误处理 - 其他所有内容都应通过适当的值检查和条件处理。
答案 1 :(得分:0)
try ... catch块可以很好地解决这个问题。