2012-01-29 75 views
0

我是一位相對較新的Android程序員,我在想如何從4.0.3中的互聯網中獲取文本。我一直在尋找能夠給我一個Network on Main異常的代碼:http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html,並想知道是否有人可以提供一些示例代碼來解決這個問題,以供參考,我得到了我在此嘗試使用的代碼:http://android-er.blogspot.com/2011/04/read-text-file-from-internet-using-java.html。非常感謝。在Android 4.0.3中,您如何從互聯網中讀取文本文件

+0

你添加Internet權限('<使用許可權的android:name = 「android.permission.INTERNET對」/>')到你的'AndroidManifest.xml' – Leandros 2012-01-29 04:20:10

回答

3

在Honeycomb和Ice Cream Sandwich的(即Android 3.0版以上),您無法連接到互聯網在主線程(onCreate()onPause()onResume()等),你必須,而不是開始一個新的線程。之所以發生變化,是因爲網絡操作可能會讓應用程序等待很長時間,如果您在主線程中運行它們,整個應用程序將變得無法響應。如果您嘗試從主線程連接,則Android會拋出NetworkOnMainThreadException

要繞過此操作,您可以從新線程運行網絡代碼,並使用runOnUiThread()在主線程中執行某些操作,例如更新用戶界面。一般情況下,你可以這樣做:

class MyActivity extends Activity { 
    public onCreate(Bundle savedInstanceState) { 
    super.onCreate(); 

    // Create thread 
    Thread networkThread = new Thread() { 
     @Override 
     public void run() { 
     try { 
      // this is where your networking code goes 
      // I'm declaring the variable final to be accessible from runOnUiThread 
      final String result = someFunctionThatUsesNetwork(); 

      runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       // this is where you can update your interface with your results 
       TextView myLabel = (TextView) findViewById(R.id.myLabel); 
       myLabel.setText(result); 
      } 
      } 
     } catch (IOException e) { 
      Log.e("App", "IOException thrown", e); 
     } 
     } 
    } 
    } 
} 
+0

我完全相同的嘗試,但沒有任何成功。我的機器是Working Behind Proxy,目標版本是4.0。獲取HTML中的響應,其中顯示「CACHE ACCESS DENIED」,當它用作解析它的輸入時拋出XMLPullParserException ....我有2.6.5版本的KSOAP。我想知道它是否可能,也許有些建議會非常有幫助。似乎許多問題(如我的)在SO中沒有答案。 – iDroid 2012-06-29 13:10:26

0

您需要完成一個HTTP請求。網上有很多例子。嘗試here開始。