没有获得Android应用程序的JSON响应

时间:2016-01-06 22:57:53

标签: php android mysql json database

编辑: 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);
    }
});

2 个答案:

答案 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获取数据。

希望它有所帮助!!!