Situation:
private void connect() { String device_URL = "http://tw.yahoo.com/"; HttpURLConnection urlc; try { urlc = (HttpURLConnection) new URL(device_URL).openConnection(); urlc.connect(); Log.e("POST", urlc.getResponseMessage()); } catch (Exception e) { e.printStackTrace(); } }
It will cause "NetworkOnMainThreadException" when you try to connect the Internet.
Reason of this situation:
In case of the connection is too long, the screen is gonna block in the main thread.
Solution 1:
Ignore the policy, just add few code in below.
(Not recommend and it's only provide android SDK version 9 or highter)
private void ignoreNetworkPolicy() { if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } }
Solution 2:
Use thread.
public void createConnectThread() { Thread thread = new Thread(new Runnable() { @Override public void run() { request(); } }); thread.start(); }
Note:
If you want to update UI in thread, it will not permit because Android only allow main thread can update UI. The solution of this is "Handler".
private void updateUI() { Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { mTextView.setText("123"); } }); }
Reference:
解决android.os.NetworkOnMainThreadException
沒有留言:
張貼留言