2011-01-18 84 views
0

我創建了一個java程序,它只是讀取一個網頁代碼...谷歌的例子,它工作正常。不過,我試圖在模擬器和實際設備-Droid X上的Android應用程序中實現相同的代碼。bufferReader或InputStreamReader總是拋出異常

我試過兩種不同的方法,並且發現兩種方法都是引發相同的行IOException異常。這是創建新的bufferReader的行。我不知道它是否是bufferReader或InputStreamReader。另外,我不知道如何從異常中獲得更多信息,而不是打印出IOException。這是重要的代碼被剝離。謝謝。

 
try 
     { 
//method 1 
     URL page = new URL("http://192.168.1.108/score.php"); 
     URLConnection pageconnection = page.openConnection(); 
     BufferedReader in = new BufferedReader(
        new InputStreamReader(
        pageconnection.getInputStream())); 

//method 2 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.connect(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

while ((inputLine = rd.readLine()) != null) 
      System.out.println(inputLine); 

      in.close(); 
      rd.close(); 
      HscoreText.setText("It Worked!"); 
     } 
     catch(MalformedURLException e) 
     { 
     HscoreText.setText("MalformedURL"); 
     } 
     catch (IOException e) 
     { 
     HscoreText.setText("IOException"); 
     } 
+1

請發佈您的例外的完整堆棧跟蹤。使用Log.d(「message」,e); – 2011-01-18 21:53:30

+0

調用`e.toString()`將異常轉換爲一個字符串......這將帶來更多的信息,並帶來任何好運。 – 2011-01-18 21:54:08

回答

0

而不是做這個的,

HscoreText.setText("IOException"); 

你可以做到這一點。

HscoreText.setText(e.getMessage()); 

查看異常消息。你是說你的代碼在Android之外工作嗎?

嘗試重新啓動Eclipse和模擬器。嘗試使用其他網址。

+0

謝謝。我現在有更多的信息。我的錯誤消息說「java.net.SocketException:權限被拒絕(可能缺少INTERNET權限)」。任何線索可能意味着什麼? – drewsmug 2011-01-18 23:15:00

0

值得注意的是,您的代碼(兩個版本)都假定返回的HTML與您的平臺默認編碼具有相同的字符編碼。即使服務器在同一臺計算機上運行,​​這也可能不成立。

0

無恥插頭你可以使用Resty,不用擔心URLConnection和東西。

Resty r = new Resty(); 
String text = r.text("http://192.168.1.108/score.php").toString(); 

它會兌現內容編碼,並在其他方面得到自己的方式。

-1

試試這個 - setDoInput(true)和setDoOutput(true)在conn.connect()之後;