2017-08-16 113 views
0

我想要消耗Android端的PHP文件(news.php)生成的JSON數據。我有一個PHP文件,似乎可以正確生成JSON數據,而我的Android版本正常工作。問題是我得到了上述例外。JSONException:Value <! - ?php的java.lang.String類型無法轉換爲JSONObject

令我困惑的是,如果我將PHP文件生成的JSON細節輸出複製到單獨的文件並將其另存爲JSON文件(例如news.json),我的Android應用程序就能夠使用JSON數據,但如果我將它重新命名爲php(news.php)文件,我會收到上述異常。

我看了其他可能的重複問題,但他們不太適合我自己的。任何幫助是極大的讚賞。

我有個PHP文件編碼到JSON格式:

<?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類' 代碼段:

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的常量該類的代碼片斷:

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"}]} 
+0

你能顯示http://192.100.1.1:4000/news/news.php?latest_news=10 –

+0

的輸出我已經更新了這個問題並添加了JSON輸出數據 –

+1

你確定你發佈的json輸出是與應用程序收到的相同嗎?你得到的錯誤消息說結果字符串以「<! - ?php」開頭,它看起來像破損的php openning標籤。也許嘗試在Android代碼中記錄結果變量的內容(Log.d(「mytag」,result))。 –

回答

0

由於josef.adamcik,我用Log.d(「標籤」,結果)來獲取日誌的異常,並強調它確實讀PHP文件,以「<!--」開頭。

的「db_connection.php」在news.php文件「包含」文件已經在它開始<!--comments -->和在去除這部分的一切運作良好的部分。

編輯:因爲我用括號IDE

我在PHP中的多線使用<!--comments-->評論,而不是/* comments */

,反正變灰<!--comments-->部分,我忽略了,這是錯誤的。

+1

但是..在php中的評論是用'//'製作的。 –

+0

謝謝@DebanikDawn,我已經編輯了上面的答案,我確定它現在應該更清楚了 –

相關問題