項目是2.1開發 測試手機是android4.0時候提示 android.os.NetworkOnMainThreadException異常
出錯誤地方是訪問網路的webservice有問題
在網上找了半天說是用
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
String strVer=GetVersion.GetSystemVersion();
strVer=strVer.substring(0,3).trim();
float fv=Float.valueOf(strVer);
if(fv>2.3)
{
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 這裡可以替換為detectAll() 就包括了磁碟讀寫和網路I/O
.penaltyLog() //列印logcat,當然也可以定位到dropbox,通過檔案儲存相應的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探測SQLite資料庫操作
.penaltyLog() //列印logcat
.penaltyDeath()
.build());
}
super.onCreate(savedInstanceState);
}
代碼注意 StrictMode是2.3以上版本才有的沒辦法我又把項目升級成2.3
但這樣做2.3以下版本安裝完成後開啟後就報錯,在調用StrictMode之前做了下版本判斷
從 Android 2.3 開始提供了一個新的類 StrictMode,該類可以用於捕捉髮生在應用程式主線程中耗時的磁碟、網路訪問或函數調用,可以協助開發人員改進程式,使主線程處理 UI 和動畫在磁碟讀寫和網路操作時變得更平滑,避免主線程被阻塞。
給 Android 應用開發人員的十個建議
android.os.Build.VERSION.RELEASE;返回當前系統版本
以上問題可以解決。
注意:造成這樣的錯誤原因是代碼不符合Android規範,如果把上面訪問方式改為非同步作業就不會出現在4.0上訪問出現 android.os.NetworkOnMainThreadException異常
如:
new Thread(){
@Override
public void run(){
//你要執行的方法
//執行完畢後給handler發送一個空訊息
handler.sendEmptyMessage(0);
}
}.start();
//定義Handler對象
private Handler handler =new Handler(){
@Override
//當有訊息發送出來的時候就執行Handler的這個方法
public void handleMessage(Message msg){
super.handleMessage(msg);
//處理UI
}
};