很久不寫Android代碼手都生了,找出本身以前寫的程序發現跑不了了,也沒啥特別的錯誤提示,就看到一句有用的錯誤Caused by: android.os.NetworkOnMainThreadException
,查了下緣由上在4.0以後在主線程裏面執行Http請求都會報這個錯,大概是怕Http請求時間太長形成程序假死的狀況吧。android
解決辦法有兩個思路,分別是:ide
第一種方法:直接忽視,強制使用(強烈不推薦,可是修改簡單)
在MainActivity文件的setContentView(R.layout.activity_main)下面加上以下代碼ui
1 2 3 4 |
if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);} |
第二種方法:使用Thread、Runnable、Handler (推薦使用)
在Runnable中作HTTP請求,不用阻塞UI線程~this
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.share_mblog_view); new Thread(runnable).start();}Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data = msg.getData(); String val = data.getString("value"); Log.i("mylog","請求結果-->" + val); }}Runnable runnable = new Runnable(){ @Override public void run() { // // TODO: http request. // Message msg = new Message(); Bundle data = new Bundle(); data.putString("value","請求結果"); msg.setData(data); handler.sendMessage(msg); }} |