2012-11-10 56 views
0

我有以下API調用的Json參數網址:HTTP GET與Android的

http://rollout.gr/api/?query={%22search%22:%22places%22,%22page%22:1}

此API調用在瀏覽器中正確執行。但是當我使用DefaultHttpClient在我的Android應用程序中執行此URL時,我得到一個空響應。

我想問題是HTTP網址中的JSON數據。因此,我想問一下在Android應用程序中處理這種URL的正確方法是什麼?

非常感謝!

+0

你能告訴我們你的HTTP代碼嗎?具體來說,在接受標題中設置JSON?您的瀏覽器可能會發送\ */\ *(使用代號爲Fiddler的代理軟件進行檢查)。 –

回答

1

該讚美無效的URL字符。瀏覽器的用戶友好性足以自動URL編碼,但DefaultHttpClient不是。從代碼使用正確的行是:

http://rollout.gr/api/?query=http://rollout.gr/api/?query=%7b%22search%22:%22places%22,%22page%22:1%7d 

注意編碼讚譽(%7b%7d)。

+0

謝謝隊友!它終於奏效了!我之前也編碼過這個網址,但我沒有結果。無論如何謝謝! –

+0

沒問題,你真的回答了你自己的問題。很高興的事情解決了! –

+0

我有同樣的問題。我不斷收到價值(未經授權的401!)任何想法? – Snake

0

您的問題可能是strictmode。 我建議在線程或asynctasks中執行http請求。 strictmode不允許應用程序在uithread中執行http reauest。也許你的控制檯顯示一個警告,並且你從http響應中得到null,因爲這個。

這個項目可以解決您的問題:

http://loopj.com/android-async-http/

+0

嘿!我在Async Task中執行DefaultHttpClient,所以這不是問題。我也嘗試過任何其他的網址,它工作正常,這就是爲什麼我結束了這個問題可能是GET請求中的json參數。 –

+0

我驗證了傑森。在json語法中沒有問題。 如果您顯示一些代碼,我可能會說更多acurate。 – Ercan

0

不知道您的特定HTTP初始化代碼,我會假設你沒有提供一個明確的JSON接受頭。很多REST端點都需要這個。

httpget.setHeader("Accept", "application/json"); 
+0

不,這不是問題..例如,我打電話給:http://search.twitter.com/search.json?q=%23example我得到的結果是正確的。我也嘗試使用其他類似loopj的庫,並且在字符「{」的url中出現無效字符時出現錯誤。因此問題在於url中的JSON數據。 –

+0

你很可能是正確的。但是請注意,twitter API的作用並不會使我的建議無效。某些端點需要特定的JSON接受標頭(例如,那些使用同時提供JSON和XML響應的框架構建的標頭),其他端點則不需要。 –

+0

我查了一下,你對無效字符是正確的。這個答案不能解決你的問題,增加另一個。 –