【问题标题】:Unable to parse JSON reponse in Android无法在 Android 中解析 JSON 响应
【发布时间】:2016-01-19 05:55:57
【问题描述】:

我知道这个问题很常见,但提出的所有解决方案似乎都不适合我的情况。我正在尝试从 PHP 网络服务检索 JSON 响应,但我不断收到此错误

Error parsing data org.json.JSONException: Value <br of type java.lang.String
W/System.err: org.json.JSONException: No value for success

而下面是我认为与错误相关的 Android 代码

        // getting JSON response from PHP web service
JSONObject returnedJSONObj = listsJSONParser.makeHttpRequest(Constant.URL
                + "RetrieveListSVC.php", "GET", params);

Log.d("Returned JSON ", String.valueOf(returnedJSONObj));
success = returnedJSONObj.getInt(Constant.TAG_SUCCESS);

Log.d("JSON Success Value", String.valueOf(success));

if (success == 1){
// do stuff}

在日志 Returned JSON 我在 LogCat 中收到的输出是

D/Returned JSON: {"androidid":"1"}

但是日志JSON Success Value 没有输出。如第一块所示,成功没有价值。 PHP 已经给了我,我没有编码,因为我对 PHP 几乎一无所知,所以服务可能是有问题的服务。这是可能相关的代码

<?php
define('IEM_PATH', '../admin/com');
require_once('../admin/includes/config.php');
require_once('../admin/com/lib/IEM.class.php');
require_once ('../admin/com/lib/IEM/DBFACTORY.class.php');
require_once ('../admin/com/lib/IEM/baseAPI.class.php');
require_once ('../admin/com/lib/API/USERS.class.php');
require_once ('../admin/com/lib/IEM/baseRecord.class.php');
require_once ('../admin/com/lib/record/Users.class.php');

    function GetLists($userid = 0, $getUnconfirmedCount = false) {

        $userid = $_REQUEST['userID'];
        if (!$userid) {
        trigger_error('This user object is not loaded with any user.... You will need to supply the userid as a parameter.', E_USER_NOTICE);
            return false;
        }


        if (!$userid) {
            $userid = $this->userid;
        }

        // If user is a "System Admin" or a "List Admin", allow to access all lists
      /*  if ($userid == $this->userid) {
            if ($this->ListAdmin() || $this->listadmintype == 'a') {
                $userid = 0;
            }
        }
      */
        require_once('../admin/functions/api/lists.php');

        $listapi = new Lists_API();
        $returnA =  $listapi->GetListByUserID($userid, $getUnconfirmedCount);
        $returnResult1 = array();
            foreach ($returnA as $key => $value) { 
                //$lists[] = $key;
                $returnResult["contactList"][] = array("listID" => $returnA[$key]['listid'], "name" => $returnA[$key]['name']);
            }
       $returnResult["success"] = 1;
       echo json_encode($returnResult) ;
    }
    //}
    GetLists();

我的问题的目的是我想知道问题出在 Java 还是 PHP 代码上?我是正确处理 JSON 响应还是应该以另一种方式处理。

【问题讨论】:

  • 您分配的Constant.TAG_SUCCESS 值是什么?
  • 我认为 php 有问题。
  • 您返回的 json 不包含任何成功密钥,那么您将如何获得价值
  • @Clairvoyant public static final String TAG_SUCCESS = "success";
  • 在浏览器中运行 php 脚本。你看到屏幕上显示的任何 json 数据了吗? -- 检查/跟踪 php/apache 错误日志并显示脚本是否有错误

标签: java php android json


【解决方案1】:

JSON 响应中有错误

JSON 对象中没有关键的“成功”。

如我所见,{"androidid":"1"} 中只有 androidid 作为键。

【讨论】:

    【解决方案2】:

    Constant.TAG_SUCCESS="androidid";

    你得到的是 string 而不是 integer。 错误在下面的语句中

    success = returnedJSONObj.getInt(Constant.TAG_SUCCESS);
    

    应该是

    success = returnedJSONObj.getString(Constant.TAG_SUCCESS);
    

    【讨论】:

      【解决方案3】:

      你分配给Constant.TAG_SUCCESS的值是错误的,上面提到的是success

      所以将Constant.TAG_SUCCESS的值改为'androididor make another variable asandroidIDand assign it a value asandroidid` 这将为您提供所需的输出。

      改变

      success = returnedJSONObj.getInt(Constant.TAG_SUCCESS);
      

      success = returnedJSONObj.getString(yourNewVariable); //new variable having value which is your json attribute
      

      【讨论】:

        猜你喜欢
        • 2018-06-19
        • 1970-01-01
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        相关资源
        最近更新 更多