【问题标题】:JSON exception in AndroidAndroid 中的 JSON 异常
【发布时间】:2012-03-30 04:24:40
【问题描述】:

我正在尝试对本地主机中的数据库执行查询并将 JSON 对象发送到 android 中的客户端。我无法知道我的代码中有什么问题。所以请有人在这方面帮助我。

我的 php 代码是我发送 JSON 对象的地方。 php 代码

查询成功执行..

$row=mysql_fetch_array($result1);


    $email=$row['EM'];
    $pass=$row['PASS'];

    $post=array("email"=>$email, "pass"=>$pass); 
    $posts[] = array("post"=>$post);
    //echo "SUCCESS";
    header('Content-type: application/json');

    echo json_encode(array("posts"=>$posts));

在 android 端,我在下面有这段代码;

HttpResponse response = doPost(url, kvPairs);
        String responseBody=response.toString();
        String temp = EntityUtils.toString(response.getEntity());
        if (temp.compareTo("SUCCESS")==0)
        {
            Toast.makeText(this, "Working", Toast.LENGTH_LONG).show();
        }

以上部分执行.. 下面的代码抛出一个 JSON 异常

        JSONObject json = new JSONObject(responseBody);
    JSONArray jArray = json.getJSONArray("posts");
    no_of_obj=jArray.length();
    nemail=new String[no_of_obj];
    npass=new String[no_of_obj];
    for (int i = 0; i < jArray.length(); i++) {
        JSONObject e = jArray.getJSONObject(i);
        String s = e.getString("post");
        JSONObject jObject = new JSONObject(s);
       Toast.makeText(context,jObject.getString("email")+":"+jObject.getString("pass") , duration).show();
        nemail[i]=jObject.getString("email");
        npass[i]=jObject.getString("pass");

    }

在log cat中我可以看到:json字符串必须以“{”开头....

【问题讨论】:

  • 你能在日志中输出 JSON 对象,然后在这里发布吗?有时,如果您在开始时有额外的信息(例如,PHP 警告或其他信息),直到您查看从 API 返回的实际数据时才会知道。
  • 与最后一个 Java 块相关的异常中的第 # 行会有所帮助
  • 这意味着你的网址有问题。检查浏览器中的 url,看看你得到了什么。否则你的doPost(url,kvpair) 方法有问题
  • org.json.JSONException: JSONObject 文本必须以 org.apache.http.message.BasicHttpResponse@44ee70b8 的字符 1 处的“{”开头 这是 logcat 中显示的内容。还有例外是在这一行 JSONObject= new JSONObject(responseBody);
  • 在 doPost 中没有错误。我得到了我发送的 php 代码中的值。并且查询也会在数据库上执行。编码 JSON 对象是否有任何错误?

标签: php android json


【解决方案1】:

你可能做不到

String s = e.getString("post");

因为您给定的字符串数组中没有“post”键,...

尝试这样做,

String s = e.has("post")?e.getString("post"):null;

然后在下一行在创建 JSONObject 之前保持一个空检查..

【讨论】:

    【解决方案2】:

    试试这个

    $posts['data'] = $post;
    //echo "SUCCESS";
    header('Content-type: application/json');
    echo json_encode($posts);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多