【问题标题】:Not getting JSON response with android appandroid 应用程序没有收到 JSON 响应
【发布时间】:2016-04-11 05:06:45
【问题描述】:

编辑:20020-20020/practice.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);

}

?>

现在这是我在 Main Activity 中的 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);
    }
});

【问题讨论】:

  • 在浏览器中调用 showUsers.php 会得到什么?有什么错误吗?
  • 尝试设置内容类型:stackoverflow.com/questions/4064444/…
  • 杰夫,没有得到任何错误。屏幕上根本没有显示任何内容。虽然我刚刚在日志中注意到我得到 20020-20020/practice.mysql_php_json I/System.out: org.json.JSONException: Value
  • Jeremy,我确实在最后一组编码中将内容类型设置在顶部。它必须在脚本页面的顶部吗?
  • 您在 android 中遇到的错误是因为 php 没有返回有效的 json。所以首先让 php 工作(在浏览器中)。看起来用户表是空的?

标签: php android mysql json database


【解决方案1】:

我宁愿说这可能是您的查询错误。奇怪的是,您将用户插入user_table,然后以某种方式从users 中进行选择。因此,如果您真的想显示用户,您不应该从至少同一张表中进行选择吗?无论如何,您可以像这样修改代码:

插入用户.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')");

?>

PHP 本身也建议移除 mysqli 连接并改用 PDO。

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

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    您的 php 脚本出现错误。第一步是打开你的错误报告,所以把下面的代码放在你打开的&lt;?php标签下面:

    ini_set('display_errors', 1);
    error_reporting(-1);
    

    这将向您显示错误。现在阅读 cmets,您的查询似乎失败了。

    在尝试获取结果之前,您应该检查查询以确保它确实成功。

    $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...
    

    现在,让我们知道您遇到了哪些错误,以及您是否设法修复了这些错误。我会在您回复时更新此答案。

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多