2012-11-18 70 views
0

我想從我的android應用程序連接到數據庫,並找到了一個教程來做到這一點(link to tutorial)。從Android連接到PHP和MySQL

當我在模擬器中使用它時,它工作正常,但當我嘗試在手機上使用它時沒有問題。我已經嘗試了一個WAMP服務器,我有端口轉發它,我已經嘗試過一個真正的Web主機(000webhost)。從模擬器到手機的唯一區別是URL,我必須提供公共IP地址而不是10.0.2.2。我也嘗試了託管WAMP服務器的計算機的本地IP。我知道一些虛擬主機爲代碼添加廣告,但我確信WAMP不會這樣做。

當我使用的是手機,我從logcat中出現以下錯誤:

Error parsing data org.json.JSONException: Value <html> of type java.lang.String cannot be converted to JSONObject 

更新1:

我一直在使用捲曲來檢查什麼的回國受審。它返回一個批次(標題的bgcolor等),但我覺得這很有趣:

Access denied for user 'root'@'localhost' (using password: NO) in C:\wamp\www\android_connect\db_connect.php on line <i>28</i></th></tr> 

現在看來似乎不能訪問數據庫,但我可能是錯的?

當我使用cURL來訪問本地主機時,它將從數據庫中返回正確的項目,而不是所有的HTML代碼作爲具有公有IP的服務器。

更新2:

我解決了這個問題與公衆WAMP服務器。我是一個noob,忘記了我已經用密碼設置了服務器。

但是,當我使用虛擬主機提供商(000webhost的)從瀏覽器中我仍然得到這個錯誤:

PHP Error Message 

Warning: require_once(__DIR__/db_connect.php) [function.require-once]: failed to open stream: No such file or directory in /home/a7471305/public_html/android_connect/get_all_products.php on line 12 

Free Web Hosting 

PHP Error Message 

Fatal error: require_once() [function.require]: Failed opening required '__DIR__/db_connect.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/a7471305/public_html/android_connect/get_all_products.php on line 12 

Free Web Hosting 

我從捲曲得到這個錯誤:

<b>Fatal error</b>: require_once() [<a href='function.require'>function.require 
</a>]: Failed opening required '__DIR__/db_connect.php' (include_path='.:/usr/li 
b/php:/usr/local/lib/php') in <b>/home/a7471305/public_html/android_connect/get_ 
all_products.php</b> on line <b>12</b><br /> 

如何這個問題可以解決?

+2

您的PHP可能會向您顯示一條錯誤消息,而不是預期的json輸出。爲什麼不嘗試閱讀? – Tchoupi

+0

另外,查看服務器日誌文件也許是有意義的。錯誤和問題實際上寫在那裏是一個非常整潔的事情... – arkascha

+1

檢查來自服務器的響應。看起來你正在得到HTML頁面,而不是JSON字符串.. –

回答

1

我找到了解決方案。感謝所有幫助過我的人。

的虛擬主機提供商無法找到該文件,因爲我用

require_once(__DIR__ . '/db_connect.php'); 

要找到在同一文件夾下一個PHP文件。 而應該使用:

define('__ROOT__', dirname(dirname(__FILE__))); 
require_once(__ROOT__.'/android_connect/db_connect.php'); 
+0

你好親愛的。我也有這個問題。我剛剛改變了'db_connect.php'文件(取而代之),但同樣的錯誤。你可以幫幫我嗎? –

1

它看起來像你打的URI是返回一個HTML文檔而不是JSON。導航到Web瀏覽器中的URI或使用CURL查看它返回的內容。

正如其他人提到的,PHP可能會顯示錯誤,或者您可能正在接收Web服務器錯誤(àla 404或500)。

一些免費的網絡主機將廣告注入HTML響應,這可能會導致調試和生產之間的差異。您可能希望將Response-Type頭設置爲application/json,這可能會避免任何插入操作。

例:

// This must go before any output has started, I.E. at the 
// beginning of the first loaded document 
header('Content-type: application/json'); 
+0

當我在PHP文件中使用頭時,出現以下錯誤:解析數據org.json.JSONException時發生錯誤:值爲 java.lang類型的值.String無法轉換爲JSONObject – barto90

+1

當您在Web瀏覽器中查看頁面或通過CURL時,您獲得了什麼? – Mitch

0

當你在仿真器的工作環境,嘗試用你的手機在WLAN相同。然後你之間沒有額外的步驟/服務器,這可能會扭曲你的服務器響應。

+0

我曾嘗試過,但沒有任何反應,然後應用程序崩潰,並提供NullPointerException和此錯誤消息:錯誤解析數據org.json.JSONException:字符0的 – barto90

+1

輸入結束然後,您必須首先檢查您的返回以防止此類事故發生。也許你的無線局域網路由器會阻塞你的網絡服務器如果您檢查返回碼並將它們記錄到logcat,您可能會確定發生了什麼問題。 –