【问题标题】:String cannot be converted to JSONObject?字符串无法转换为 JSONObject?
【发布时间】:2012-05-12 21:25:43
【问题描述】:

我是开发 Android 应用程序的初学者,这是我第一次从头开始编码,这就是为什么我觉得这对我来说非常困难。基本上,我只想摆脱错误,以便现在可以开始在我的 Android 应用程序上显示 SQL 表。当我从 mySQL 表中获取数据时,我被这个错误阻止了。我在 LogCat 得到这个:

Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
05-03 15:45:25.586: W/System.err(552): java.lang.NullPointerException
05-03 15:45:25.626: W/System.err(552):  at hs.stockapp.StocksTask.doInBackground(StocksTask.java:64)

如果我理解错误,我的 StocksTask.java 文件的第 64 行有问题。

第 64 行:if (json.getString(KEY_SUCCESS) != null)

StocksTask.java 代码摘录:

protected Integer doInBackground(String... params)  {

    UserFunctions userFunction = new UserFunctions();
    JSONObject json = userFunction.findStocks();
    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){         
                DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext());
                JSONObject json_stocks = json.getJSONObject("stocks");
                Log.v("company_name", json_stocks.getString(STOCK_COMPANY_NAME));
                userFunction.findStocks();
                db.findStocks(json_stocks.getString(STOCK_COMPANY_NAME), json_stocks.getString(STOCK_SYMBOL), json_stocks.getString(STOCK_MCAP));                        

                responseCode = 1;
                // Close Screen
                //finish();
            }else{
                responseCode = 0;
                // Error 
            }
        }
    }
    catch (NullPointerException e) {
        e.printStackTrace();
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
    return responseCode;
}

UserFunctions.java

 public JSONObject findStocks(){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", findstocks_tag));
    JSONObject json = jsonParser.getJSONFromUrl(stocksURL, params);
    // return json
    return json;
} 

index.php

else if ($tag == 'stocks'){
    // request type is view stock list
    $stocks = $db->search_stocks();
    if ($stocks != false) {
        // stocks
        // echo json with success = 1
        $response["success"] = 1;
        $response["stocks"]["company_name"] = $stocks["name"];
        $response["stocks"]["com_sym"] = $stocks["com_sym"];
        $response["stocks"]["mkt_cap"] = $stocks["mkt_cap"];
        echo json_encode($response);
    } else {
        // no stocks found
        // echo json with error = 0
        $response["error"] = 1;
        $response["error_msg"] = "No stocks found";
        echo json_encode($response);
    }

} 

DB_functions.php

    public function search_stocks() {
    $result = mysql_query("SELECT company_name, com_sym, mkt_cap from stock ORDER BY com_sym") or die(mysql_error());
    $no_of_rows = mysql_num_rows($result);

    if ($no_of_rows > 0) {
        while($row=mysql_fetch_assoc($result)){
            $output[] = $row;
        }               
        print(json_encode($output)); 
        return $row;            
    return true;
    } else {
        // stocks not existed
        return false;
    }
mysql_close();  

}

search_stocks 函数的生成结果

[{"company_name":"Asian Chorva","com_sym":"ASIA","mkt_cap":"4534356"},{"company_name":"Banko de Oro","com_sym":"BDO","mkt_cap":"54434"},{"company_name":"Bank of the Phil Island","com_sym":"BPI","mkt_cap":"5464554"},{"company_name":"College Hive In Boon","com_sym":"CHIB","mkt_cap":"5434654"},{"company_name":"Critical Heart Throb Racing","com_sym":"CHTR","mkt_cap":"53544564654"}]

我应该如何处理第 64 行?非常感谢:) 任何帮助将不胜感激。有关它的其他信息将非常有帮助。

【问题讨论】:

  • 您的服务器似乎没有用 JSON 响应,它实际上用 xml 响应。
  • 在打印 json_encode($output) 之前尝试发送 header('Content-type: json/application')
  • @VladimirIvanov 谢谢!我想我现在已经掌握了错误的含义。现在找出解决方法。
  • @ChadHedgcock 谢谢,但这并没有解决问题:/

标签: java php mysql json android-emulator


【解决方案1】:

错误信息说:

java.lang.String 类型的值 SONObject

如果是&lt;!DOCTYPE,那么就不是[{"company_name":…

您需要准确了解正在发出的请求以及服务器返回 HTML 文档的原因。

检查您的服务器日志。这可能是一个错误文档。

【讨论】:

  • 也许他正在对 JSON 字符串进行编码,但并未阻止服务器生成带有标头和所有内容的标准 HTML...
  • @helios 哦!有什么建议该怎么做吗?对不起,我真的一无所知。感谢您的快速回复!
  • @Masochist — 按照我在原始答案中给出的指示将告诉您 helios 的推测是否正确。
  • @Quentin 我现在明白了。再说一次,这是代理在我尝试访问数据库时产生的错误。 :/我将尝试弄清楚如何通过它并检查我的问题是否已解决。谢谢!!你们帮了大忙。
【解决方案2】:

正确检查您将在其中显示的网址,例如 UserFunctions.java 中的 "http://10.0.2.2/api/",其中 api 文件夹存储在 www 或 htdocs 文件夹中

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2013-10-16
    • 2017-01-27
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多