Android NetworkOnMainThreadException
示例
从文档中:
当应用程序尝试在其主线程上执行联网操作时引发的异常。
仅针对面向HoneycombSDK或更高版本的应用程序抛出此错误。允许以早期SDK版本为目标的应用程序在其主事件循环线程上进行联网,但不建议这样做。
这是可能导致该异常的代码片段的示例:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Uri.Builderbuilder = new Uri.Builder().scheme("http").authority("www.google.com"); HttpURLConnection urlConnection = null; BufferedReader reader = null; URL url; try { url = new URL(builder.build().toString()); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); } catch (IOException e) { Log.e("TAG","Connection error", e); } finally{ if (urlConnection != null) { urlConnection.disconnect(); } if (reader != null) { try { reader.close(); } catch (final IOException e) { Log.e("TAG", "Error closing stream", e); } } } } }
NetworkOnMainThreadException当应用程序试图在主线程上执行网络操作时,以上代码将针对面向HoneycombSDK(Androidv3.0)或更高版本的应用程序抛出。
为了避免这种例外,您的网络运营必须始终在后台任务通过运行AsyncTask,Thread,IntentService,等。
private class MyAsyncTask extends AsyncTask<String, Integer, Void> { @Override protected Void doInBackground(String[] params) { Uri.Builderbuilder = new Uri.Builder().scheme("http").authority("www.google.com"); HttpURLConnection urlConnection = null; BufferedReader reader = null; URL url; try { url = new URL(builder.build().toString()); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); } catch (IOException e) { Log.e("TAG","Connection error", e); } finally{ if (urlConnection != null) { urlConnection.disconnect(); } if (reader != null) { try { reader.close(); } catch (final IOException e) { Log.e("TAG", "Error closing stream", e); } } } return null; } }