无法从PHP到Android获取JSON对象
我想这是PHP的一个问题 我在Android应用程序中使用了异步任务,并从php检索了JSON对象。当我用php对JSON对象进行编码时,它工作得很好,并且我能够将数据传输到Android。别担心! 没有错误 但我的问题是,如果我在if条件或循环中编码JSON数组或对象,我就有问题了 示例当我的php如下所示时,我能够将json数据检索到android:无法从PHP到Android获取JSON对象,php,android,json,Php,Android,Json,我想这是PHP的一个问题 我在Android应用程序中使用了异步任务,并从php检索了JSON对象。当我用php对JSON对象进行编码时,它工作得很好,并且我能够将数据传输到Android。别担心! 没有错误 但我的问题是,如果我在if条件或循环中编码JSON数组或对象,我就有问题了 示例当我的php如下所示时,我能够将json数据检索到android: <?php //Connecting to server, database and etc.... $a = array(); $a
<?php
//Connecting to server, database and etc....
$a = array();
$a = array('mydata' => "halo");
print $json = json_encode($a);
?>
以上代码运行良好,我可以将json数据发送到我的android应用程序。但当我在if条件或循环中编码json时,我的android应用程序不会识别编码的json数据!像这样:
<?php
//Connecting to server, database and etc....
$a = array();
if (mycondition) {
$a = array('mydata' => "Condition True");
print $json = json_encode($a);
} else {
$a = array('mydata' => "Condition False");
print $json = json_encode($a);
}
?>
请注意,当我使用web浏览器打开时,上面的代码工作正常。但是我的android应用程序没有识别第二个php代码中给出的json数据!有什么问题吗?我希望你能理解我想问的问题 如果条件与android如何处理结果没有任何关系 您可能希望尝试打印第二个示例中完全相同的json数据,而不使用if条件,以查看是否存在空间不应真正成为问题的问题
您可能需要检查的另一件事是将标题“Content-Type:application/json”;在你的脚本顶端 您必须设置PHP头
header('Content-Type: application/json');
这不是一个答案,而是一个自成一体的例子
<?php
//Connecting to server, database and etc....
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// setup sample data
setup($pdo);
$query = '
SELECT
id,value
FROM
soFoo
';
// processing
$data = array('a'=>array(), 'b'=>array());
foreach( $pdo->query($query, PDO::FETCH_ASSOC) as $r ) { // a loop
if ( 0==$r['id']%2 ) { // a condition
$data['a'][] = $r['value'];
}
else {
$data['b'][] = $r['value'];
}
}
// encode data and send to client
header('Content-Type: application/json');
echo json_encode($data);
/*
* creates a temporary table
* and fills it with test data
*/
function setup($pdo) {
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
value varchar(32),
primary key (id)
)
');
$stmt = $pdo->prepare('INSERT INTO soFoo (value) VALUES (?)');
foreach(array('mary', 'the', 'had', 'quick', 'a', 'brown', 'little', 'fox', 'lamb') as $w ) {
$stmt->execute( array($w) );
}
}
那么这绝对不是PHP的问题。这要么是你的echo有问题,浏览器HTML标记中没有像隐形这样的噪音,要么是你在Android应用程序中使用的解析器有问题。echo有问题吗?我不明白!当我用浏览器打开php时,它工作了。我的if条件起作用,json被相应地打印到条件中。但是为什么我的android应用程序不能在if条件之内或之后获取编码数据呢!那是我的问题@userXXX现在阅读并理解我写的内容。你能提供一个你已经测试过但没有产生你想要的结果的最小但完整的例子吗?您发布的代码表明您的php不太流利,因此错误可能在您不期望的地方,因此不会显示给我们。我已经设置了,但不起作用!现在它停止在web浏览器中提供json编码的输出!尝试echo$json=json\u encode$a;而不是打印$json=json\U编码$a;echo甚至不显示输出!:抱歉,我几乎睡着了,您正在回显/打印赋值语句$json=json_encode$a的输出;不是实际结果,需要输出json_encode$a的结果;这样地。echo json_编码$a;当我删除if条件时,它会工作。但是如果我在if条件内或之后编码json数据,那么我的android应用程序就无法识别!你能发布完整的源代码或者至少更多的源代码吗?
{"a":["the","quick","brown","fox"],"b":["mary","had","a","little","lamb"]}