Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 636|回复: 0

Q&A: android程序凋用php生成的json出错

[复制链接]

该用户从未签到

发表于 2011-10-22 18:56:50 | 显示全部楼层 |阅读模式
android程序凋用php生成的json出错

服务器是php+mysql
php文件用记事本打开,另存为utf-8
MySQL数据库编码utf8

MySQL Users 结构
DROP TABLE IF EXISTS `dm0001`.`Users`;
CREATE TABLE  `dm0001`.`Users` (
  `Id` varchar(15) NOT NULL,
  `Name` varchar(10) DEFAULT NULL,
  `Pwd` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

json.php
<?php   
// 将数组转换成Json格式,中文需要进行URL编码处理
function Array2Json($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    $json = urldecode($json);
    // ext需要不带引号的bool类型
    $json = str_replace("\"false\"","false",$json);
    $json = str_replace("\"true\"","true",$json);
    return $json;
}

function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }

        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
?>

index.php代码:
<?php   
        include("common/json.php");
//        header("content-type:text/HTML; charset=utf-8");
        $link=mysql_connect("localhost","root","aaaaaa");
            mysql_select_db("dm0001", $link);   
        mysql_query("set names 'utf8'", $link);
        
        $sql="SELECT * FROM Users WHERE id='".$_REQUEST['id']."'";
            $result=mysql_query($sql);
            while($e=mysql_fetch_assoc($result))   
                $output[]=$e;   
               
        print(Array2Json($output));
        mysql_close();
?>

http://dm0001.gotoip3.com/android/index.php?id=9900

index.php 在IE中访问得到json  [{"Id":"9900","Name":"吕静",&quotwd":"9463"}]

下面为安卓程序的代码:

        String json = "";
        String httpUrl = "http://dm0001.gotoip3.com/android/index.php";     
        //首先使用NameValuePair封装将要查询的年数和关键字绑定
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("id","9900"));
        
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(httpUrl);                        
        //使用HttpPost封装整个SQL语句
        //使用HttpClient发送HttpPost对象
        try{
                              
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                                       
                                    
                //将HttpEntity转化为String

                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuilder sb = new StringBuilder();
                String line = null;
                                       
                while ((line = reader.readLine()) != null) {
                        sb.append(line);
                }
                is.close();
                                       
                json = sb.toString();

                                                            
                Log.i("log_tag", "json="+json);   //这个地方可以正常得到结果json=[{"Id":"9900","Name":"吕静","Pwd":"9463"}]
   

                JSONArray array = new JSONArray(json);  //问题在这个地方报错   05-23 10:34:25.594: ERROR/log_tag(260): >>> org.json.JSONException: A JSONArray text must start with '[' at character 1 of ??[{"Id":"9900","Name":"吕静","Pwd":"9463"}]
                for(int i=0;i<array.length();i++){
                        JSONObject json_data = array.getJSONObject(i);
                               Log.i("log_tag","id: "+json_data.getInt("Id")+
                                ", name: "+json_data.getString("Name")+
                                ", pwd: "+json_data.getInt("Pwd")
                        );
                }
        }catch(Exception e){
                    Log.e("log_tag", ">>> "+e.toString());
            }

希望哪位大哥给指点一下
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 18:56:56 | 显示全部楼层

Re:Q

高手帮忙啊
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 18:57:01 | 显示全部楼层

Re:Q

请问楼主的问题解决了么?我也遇到了php和android之间json传递的问题。。。。传过来的json打印出来格式是正确的,但是解析的时候说不是json之类的,究竟是什么问题啊,是不是编码导致的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 14:08 , Processed in 0.329849 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表