【问题标题】:Can't recieve data from JSON - PHPMyAdmin无法从 JSON 接收数据 - PHPMyAdmin
【发布时间】:2017-11-25 15:18:21
【问题描述】:

我有一个 PHP 脚本,用于从 BBDD 获取一些信息:

<?php 
//Creating a connection
$con = mysqli_connect("localhost:3306","root","","database");

if (mysqli_connect_errno())
{
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql= "SELECT * FROM tQuestions";

$result = mysqli_query($con ,$sql);

while ($row = mysqli_fetch_assoc($result)) 
{       
    $array[] = $row;
    (ONLY USED ON SECOND TRY) echo $row;
}
header('Content-Type:Application/json');

echo json_encode($array);

mysqli_free_result($result);

mysqli_close($con);
?>

当我在我的 Android 应用程序上使用它时,我收到一个空值。此外,当我转到正确的链接时,我会收到一个没有信息的页面和一个无效的 JSON 文件。

当我输入echo $row 来查看我收到的内容时,我有一个类似这样的字符串:ArrayArrayArrayArray,它有 50 个“数组”字,与我在数据库中的行相同。

我做错了什么?

这是我的 Android 代码:

private void getQuestionsFromDB() {

    AsyncTask<Void, Void, JSONArray> asyncTask = new AsyncTask<Void, Void, JSONArray>() {
        @Override
        protected JSONArray doInBackground(Void... params) {

            JSONArray array = null;
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://www.am-motion.eu/scriptsapp/preguntas.php")
                    .build();
            try {
                Response response = client.newCall(request).execute();

                array = new JSONArray(response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return array;
        }

        @Override
        protected void onPostExecute(JSONArray array) {
            try {
                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = null;
                    object = array.getJSONObject(i);

                    listQuestions.add(object.getString("Question"));

                    listAnswers.add(object.getString("Answer1"));
                    listAnswers.add(object.getString("Answer2"));
                    listAnswers.add(object.getString("Answer3"));
                    listAnswers.add(object.getString("Answer4"));

                    listCorrectAnswer.add(object.getString("Answer"));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    };

    asyncTask.execute();
}

【问题讨论】:

  • 如果您从浏览器访问 URL,输出是什么?是否显示json 数据?
  • 没有输出。我看到一个白页tihout信息。但是,如果我使用“echo $row”,则输出为“ArrayArrayArray...”
  • 请检查您的 apache 错误日志,我只是好奇 json 模块未在您的 php 中激活

标签: php android mysql json phpmyadmin


【解决方案1】:

您的问题是您将所有数组传递给“json_encode”函数。您必须使用 for 或 foreach 循环来解析值:

for ($i = 0; $i < sizeof($array); $i++) {
    echo json_encode($array[$i]);
}

如果你想要一个 JSONArray,你可以使用:

for ($i = 0; $i < sizeof($array); $i++) {
    if($i==0){
        echo '[';
        echo json_encode($array[$i]);
    } else if ($i == sizeof($array) -1) {
        echo json_encode($array[$i]);
        echo "]";
    } else {
        echo json_encode($array[$i]);
        echo ",";
    }
}

【讨论】:

  • 第一个工作正常,但第二个给我一个没有数据的页面,全是白衣。你知道为什么吗?我对第二个选项很感兴趣。
  • 我在最后加上一个“}”。但我认为格式根本不正确。它在最后,在“]”之前给了我两个额外的“,”。
  • 而且它也没有放 "," 。正如我所说,只有在最后。
  • 您是否复制/粘贴了 for 循环?因为我尝试使用本地数据库并且没关系,使用您的代码。
  • 并用JSONLint测试了JSON数据,它说JSON是有效的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2017-03-20
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多