无法从 JSON 接收数据 - PHPMyAdmin
Posted
技术标签:
【中文标题】无法从 JSON 接收数据 - PHPMyAdmin【英文标题】:Can't recieve data from 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 中激活
【参考方案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是有效的以上是关于无法从 JSON 接收数据 - PHPMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章
C# Rest 服务 - 无法在服务方法中接收 JSON 请求
无法从使用 C# 开发的 Android 应用程序接收 json
如何在 FutureBuilder 中解析从本地主机接收的 JSON 对象