1. 程式人生 > >android 中訪問localhost:8080 報錯org.apache.http.conn.HttpHostConnectException

android 中訪問localhost:8080 報錯org.apache.http.conn.HttpHostConnectException

報這個錯 一上來肯定想不明白以前作任何網路開發 先訪問本地服務localhost:8080作測試很正常。也沒出過什麼問題但是今天作android開發,先在本機8080埠上搭建一個服務,然後從模擬器上訪問該服務時報出了org.apache.http.conn.HttpHostConnectException錯誤其實 靜下心來想想,模擬器實際上是個虛擬機器,我們程式碼中指定的localhost 是模擬器而不是我們的pc所以 你應該把localhost改為你現在pc的ip地址 這個問題就輕鬆解決了! 當然 如果你的機器本身就是在測試本地的localhost服務沒有公網ip該怎麼辦?那麼你就只能用android模擬器了,然後將你的ip地址改為10.0.2.2:8080這樣模擬器就可以訪問本機的網路服務了。如果是真機,那不行,你還是需要為你的pc找一個公網地址。
參考地址:http://blog.sina.com.cn/s/blog_67d95f400100mmu9.html


最近兩天學習android Mp3專案練習,mars老師講的過程中都一切順利,沒有什麼問題,但是我的機器上老是執行不出來,昨天晚上我除錯很久,程式沒有問題,後來發現我的tomcat伺服器訪問不了,才讓我想起來,之前自己在機器上安裝過一個php開發包,裡面封裝著mysql和apache,可能是埠的問題,於是我把php裡面的服務都取消,tomcat可以訪問了,但是還是一直從伺服器上無法讀取檔案資訊。絞盡腦汁也想不出來個所以然來,測試程式總是在:
    

URL url=new URL("http://localhost:8080/mp3/resources.xml");
    System.out.println("SSSSSSSSSSSSSSSSSSSSS22");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
    System.out.println("SSSSSSSSSSSSSSSSSSSSS11");
    InputStreamReader isr=new InputStreamReader(conn.getInputStream(),"UTF-8");
    System.out.println("SSSSSSSSSSSSSSSSSSSSS33");  
    BufferedReader br = new BufferedReader(isr);
    System.out.println("SSSSSSSSSSSSSSSSSSSSS"+br.toString());


紅色字型部分停止,就是查不出原因,自己想想也許是自己機器上的問題,於是我換了一臺機器執行,結果依然如是,我幾乎愁壞了,因為從logcat裡面也沒看出來所以然來,再我無計可施時,我休息一上午,自己想想既然有問題肯定會從logcat上表現出來,於是又從logcat下手,因為之前我一直Logcat裡查原因,還有就是自己寫過濾器,後來無意中點選幾下下圖的按鈕:,在W(warming)警告裡面有一句“java.net.ConnectException: localhost/127.0.0.1:8080 -Connection refused”,才找到這個問題的根結所在,原來
原來模擬器預設把127.0.0.1和localhost當做本身了
在模擬器上可以用10.0.2.2代替127.0.0.1和localhost
另外如果是在區域網環境可以用 192.168.0.x或者192.168.1.x(根據具體配置)連線本機。
至此,問題解決,頓時都想淚奔;同時提醒大家,在使用套接字時,別忘了在androidManifest.xml中新增許可權,否則無法完成訪問。
<uses-permission android:name="android.permission.INTERNET"/>


參考地址:http://blog.csdn.net/tts_kevin/article/details/6270983