Android中網路編程出錯

來源:互聯網
上載者:User

  在android 2.3上設計的下載程式,在android 4.0上運行時報android.os.NetworkOnMainThreadException異常,原來在4.0中,訪問網路不能在主程式中進行,有兩個方法可以解決。

  一個是在主程式中增加:

// 詳見StrictMode文檔  StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()          .detectDiskReads()          .detectDiskWrites()          .detectNetwork()   // or .detectAll() for all detectable problems          .penaltyLog()          .build());  StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()          .detectLeakedSqlLiteObjects()          .detectLeakedClosableObjects()          .penaltyLog()          .penaltyDeath()          .build());  

   另一種是啟動線程執行下載任務:

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.main);        // 啟動線程執行下載任務        new Thread(downloadRun).start();    }        /**    * 下載線程    */    Runnable downloadRun = new Runnable(){    @Override  public void run() {      // TODO Auto-generated method stub      updateListView();  }    };  

  

 Android中SharedPreferences的模式

MODE_MULTI_PROCESS這個值是一個標誌,在Android 2.3及以前,這個標誌位都是預設開啟的,允許多個進程訪問同一個SharedPrecferences對象。而以後的Android版本,必須通過明確的將MODE_MULTI_PROCESS這個值傳遞給mode參數,才能開啟多進程訪問。

我們在獲得SharedPreferences的時候,需要判斷一下SDK的版本號碼:

int __sdkLevel = Build.VERSION.SDK_INT;  SharedPreferences __sp = $context.getSharedPreferences(SETTING_NAME, (__sdkLevel > Build.VERSION_CODES.FROYO) ? 4 : 0);  

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.