我在从本地服务器获取数据到Android应用程序时遇到一些问题。 架构:Android - PHP /查询 - MySQL数据库。
这是调用函数(在db_function.php中)执行查询的函数(在loadData.php中):
$exists = $db -> loadData($id);
在db_function.php中,函数如下所示:
public function loadData($app_cust_id) {
$results = mysql_query("SELECT * FROM ...") or die (mysql_error());
$messages = array();
if (mysql_num_rows($results)) {
while ($result = mysql_fetch_assoc($results)) {
$messages[] = $result;
}
}
return $messages;
...现在回来了...为了获得数组结果并回显正确的json_encode,我需要编写什么?我是否必须创建一个新数组,循环结果并将其存储在新数组中?
$result = $db -> loadData($id);
// ???
$response["success"] = 0;
echo json_encode($response);
编辑:
$result = $db -> loadData($id);
$result["success"] = 0;
echo json_encode($result);
所以我做了这些改变。似乎没有数据被发送回我的java函数。 logcat说:“解析数据时出错org.json.JSONException:字符0处的输入结束”我找不到解决方案。任何能告诉我在java中使用正确的json_encode和正确的jsonparser进行处理的人。非常感谢!
JSONObject json = jsonParser.getJSONFromUrl(URL, params);;
答案 0 :(得分:2)
$result = $db -> loadData($id);
loadData
方法返回的内容存储在名为$result
的变量中,而不是$response
中。因此它应该是:
// not $response["success"] =0;
$result["success"] = 0;
echo json_encode($result);
答案 1 :(得分:2)
就个人而言,我不会将您的success
元素混合在包含您的消息的同一个数组中。我会做这样的事情:
$response = array();
$messages = $db->loadData($id);
$response['success'] = 0;
$response['messages'] = $messages;
echo json_encode($response);
现在我注意到你的函数中绝对没有错误处理或边缘案例处理(如果出现错误你就会死掉)。如果查询失败,您应该返回呼叫客户端?如果没有找到消息,你会怎么做?
最后,有几个关于你如何使用数据库的注意事项:
mysql_*
函数,因为它们已被弃用。我建议使用mysqli
或PDO
。