【问题标题】:JSONException: Value <!--?php of type java.lang.String cannot be converted to JSONObjectJSONException:Java.lang.String 类型的值 <!--?php 无法转换为 JSONObject
【发布时间】:2017-08-16 10:56:52
【问题描述】:

我想使用 Android 端的 PHP 文件(news.php)生成的 JSON 数据。我有一个似乎可以正确生成 JSON 数据的 PHP 文件,并且我的 Android 端工作正常。问题是我得到了上述异常。

真正让我感到困惑的是,如果我将 PHP 文件生成的 JSON 详细信息输出复制到单独的文件中并将其保存为 JSON 文件(例如 news.json),我的 Android 应用程序能够使用 JSON 数据,但是如果我将它重新指向 php (news.php) 文件,我会收到上述异常。

我查看了其他可能重复的问题,但它们不太适合我自己的问题。非常感谢任何帮助。

我有一个编码为 JSON 格式的 php 文件:

<?php

include("includes/db_connection.php");          

if (isset($_GET['latest_news'])) {
    $limit = $_GET['latest_news'];      
    $query = "SELECT * FROM tbl_news_category c, tbl_news n WHERE c.cid = n.cat_id ORDER BY n.nid DESC LIMIT $limit";
    $result = mysqli_query($con, $query);
}   

$total_records = mysqli_num_rows($result);
if ($total_records >= 1) {
    while ($link[] = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $set['RecentNews'] = $link;
    }
}     

echo $val = str_replace('\\/', '/', json_encode($set,JSON_UNESCAPED_UNICODE));

//}

?>

然后我有一个“Android JSON 类”代码 sn-p:

try {
    JSONObject mainJson = new JSONObject(result);
    JSONArray jsonArray = mainJson.getJSONArray(Constant.CATEGORY_ARRAY_NAME);
    JSONObject objJson = null;
    for (int i = 0; i < jsonArray.length(); i++) {
        objJson = jsonArray.getJSONObject(i);
        ItemLatest objItem = new ItemLatest();
        objItem.setCId(objJson.getString(Constants.CATEGORY_ITEM_CID));
        objItem.setCategoryName(objJson.getString(Constants.CATEGORY_ITEM_NAME));
        //objItem.setCategoryImage(objJson.getString(Constants.CATEGORY_ITEM_IMAGE));
        objItem.setCatId(objJson.getString(Constants.CATEGORY_ITEM_CAT_ID));
        objItem.setNewsImage(objJson.getString(Constants.CATEGORY_ITEM_NEWSIMAGE));
        objItem.setNewsHeading(objJson.getString(Constants.CATEGORY_ITEM_NEWSHEADING));
        objItem.setNewsDescription(objJson.getString(Constants.CATEGORY_ITEM_NEWSDESCRI));
        objItem.setNewsDate(objJson.getString(Constants.CATEGORY_ITEM_NEWSDATE));
        arrayOfLatestnews.add(objItem);
    }
}
catch (JSONException exc) {
    exc.printStackTrace();
}

Android 'Constants class' 代码 sn-p:

public class Constants implements Serializable {

    public  static final String SERVER_URL = "http://192.100.1.1:4000/news";

    public static final String LATEST_URL = "http://192.100.1.1:4000/news/news.php?latest_news=10"; 

    public static final String CATEGORY_ARRAY_NAME = "RecentNews";
    public static final String CATEGORY_NAME = "category_name";
    public static final String CATEGORY_CID = "cid";
    public static final String CATEGORY_IMAGE = "category_image"; 
    ...
}

编辑:

JSON 输出:

{"RecentNews":[{"cid":"7","category_name":"World","category_image":"91771_world.jpg","status":"1","nid":"9","cat_id":"7","news_heading":"World Sample News Heading","news_description":"
World Sample News 

\r\n","news_image":"88702_IMG_5038.JPG","news_date":"08-16-2017","news_status":"1"},{"cid":"12","category_name":"IT","category_image":"98162_IMG_1303.JPG","status":"1","nid":"8","cat_id":"12","news_heading":"IT Sample News Heading","news_description":"
IT Sample News 

\r\n","news_image":"24966_IMG_5018.JPG","news_date":"08-03-2017","news_status":"1"},{"cid":"5","category_name":"Business","category_image":"4591_download.jpg","status":"1","nid":"7","cat_id":"5","news_heading":"Business Sample News Heading","news_description":"
Business Sample News 

\r\n","news_image":"13015_IMG_5017.JPG","news_date":"08-02-2017","news_status":"1"},{"cid":"4","category_name":"Sports","category_image":"22814_sports.jpg","status":"1","nid":"6","cat_id":"4","news_heading":"Sports Sample News Heading","news_description":"
Sports Sample News

\r\n","news_image":"72021_IMG_5016.JPG","news_date":"08-01-2017","news_status":"1"}]}

【问题讨论】:

  • 我已更新问题并添加了 JSON 输出数据
  • 您确定您发布的 json 输出与应用程序收到的输出相同吗?您收到的一条错误消息说结果字符串以“

标签: php android json


【解决方案1】:

感谢 josef.adamcik,我使用 Log.d("tag", result) 来获取异常日志,并突出显示它确实正在读取以“@”开头的 php 文件987654321@"。

news.php 文件中“包含”的“db_connection.php”文件中有一个以&lt;!--comments --&gt; 开头的部分,删除该部分后一切正常。

编辑:

我曾在 php 中使用 &lt;!--comments--&gt; 用于多行 cmets 而不是 /* comments */

因为我使用的是 Brackets IDE,所以无论如何它都会使 &lt;!--comments--&gt; 部分变灰,我忽略了它是错误的。

【讨论】:

  • 但是.. php中的cmets是用'//'制作的。
  • 谢谢@DebanikDawn,我已经编辑了上面的答案,我相信现在应该更清楚了
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多