编辑: 20020-20020 / practise.mysql_php_json I / System.out:org.json.JSONException:java.lang.String类型的值br无法转换为JSONObjectww 是我收到的终端中的消息。
我正在努力通过关注youtube上的教程来获得一个简单的插入和检索应用程序以在android中工作。应该相当简单,我能够将用户信息发布到在线数据库,但是当我去检索它时,没有任何反应。没有得到任何错误,只是没有得到任何JSON响应。
我刚开始使用JSON和php两者,所以我不知道我是不是没有得到什么或丢失一些小东西。
这是我的 connection.php ,我知道我的凭据是正确的,因为我可以插入。
<?php
define('hostname', '--------');
define('user', '---------');
define('password', '-------');
define('database', '------------------');
$connect = mysqli_connect(hostname, user, password, database);
?>
这是我的 insertUser.php
<?php
if($_SERVER["REQUEST_METHOD"]=="POST") {
require 'connection.php';
createUser();
}
function createUser() {
global $connect;
$name = $_POST["name"];
$email = $_POST["email"];
$password = $_POST["password"];
$query = " Insert into user_table(user_name, user_email, user_password) values ('$name','$email','$password');";
mysqli_query($connect, $query) or die (mysqli_error($connect));
mysqli_close($connect);
}
?>
这是我的 showUsers.php
<?php
if($_SERVER["REQUEST_METHOD"]=="GET"){
include 'connection.php';
showStudent();
}
function showStudent()
{
global $connect;
$query = " Select * FROM users; ";
$result = mysqli_query($connect, $query);
$number_of_rows = mysqli_num_rows($result);
$temp_array = array();
if($number_of_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$temp_array[] = $row;
}
}
header('Content-Type: application/json');
echo json_encode(array("users"=>$temp_array));
mysqli_close($connect);
}
?>
现在,我在主要活动中的Android应用程序代码。这应该只是获取我的数据库中用户的名称,电子邮件和密码。我有另一个onclick方法来插入用户。
showButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JsonObjectRequest jsonObjectRequest; = new JsonObjectRequest(Request.Method.GET, showURL, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray users = response.getJSONArray("users");
for(int i=0; i<users.length(); i++) {
JSONObject user = users.getJSONObject(i);
String name = user.getString("user_name");
String email = user.getString("user_email");
String password = user.getString("user_password");
results.append(name);
}
results.append("\n");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonObjectRequest);
}
});
答案 0 :(得分:0)
您的php脚本出现错误。第一步是打开您的错误报告,因此请将以下代码放在开始<?php
标记下方:
ini_set('display_errors', 1);
error_reporting(-1);
这将显示错误。现在阅读评论,您的查询似乎失败了。
在尝试获取结果之前,您应该检查查询以确保它确实成功。
$query = " Select * FROM users; ";
$result = mysqli_query($connect, $query);
// this checks if query failed and prints error.
if(!$result){
die("SQL Error: ". mysqli_error($connect));
}
// will only get here if your query runs successfully.
$number_of_rows = mysqli_num_rows($result);
///... rest of your code...
现在,让我们知道您获得的错误以及您是否设法解决了这些错误。我在回复时会更新此答案。
答案 1 :(得分:0)
我宁愿说你的查询错了。奇怪的是,您将用户插入user_table
,然后以某种方式从users
中进行选择。因此,如果您真的想要显示用户,那么您至少应该从同一个表中进行选择吗?无论如何,您可以修改代码,如:
<强> insertUser.php 强>
<?php
error_reporting(E_ALL);
try{
$handler = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(Exception $e){
echo $e->getMessage();
die();
}
$name = $_POST["name"];
$email = $_POST["email"];
$password = $_POST["password"];
$query = $handler->query("INSERT INTO user_table(user_name, user_email, user_password) VALUES('$name','$email','$password')");
?>
删除mysqli连接并使用PDO而不是PHP本身建议。
<强> showUsers.php 强>
<?php
error_reporting(E_ALL);
try{
$handler = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(Exception $e){
echo $e->getMessage();
die();
}
$query = $handler->query("SELECT * FROM user_table");
$json = array();
$json = $query->fetchAll(PDO::FETCH_ASSOC);
$records['users'] = $json;
echo json_encode($records);
?>
您的结果将是一个名为users的JSON数组,然后您可以从JAVA获取数据。
希望它有所帮助!!!