如何在没有NetworkOnMainThreadException的情况下连接StartUp上的URL

时间:2013-09-17 13:10:10

标签: android

我正在尝试开发一个Android应用程序,它首先连接到我的Web实例并获取启动信息,然后根据该信息启动我的应用程序。

我试图在我的onCreate方法中编写URL连接代码,但是当我运行应用程序时,它会抛出NetworkOnMainThreadException。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StartUp startUp = new StartUp(); // StartUp() constructor has URL Connection codes and this line throws exception
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl(startUp.getFirstLoadUrl());
    mWebView.setWebViewClient(new WebViewHandler());
}

我不应该使用线程,因为我的onCreate方法中的其他代码必须等待URL连接的输出。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您需要的是AsyncTask,您可以使用onCreate方法开始,该方法在后台进行网络通信(doInBackground方法)。当任务正在运行时,您可以显示某种进度对话框(或活动中的视图),让用户知道正在发生的事情以及他需要等待的事情。同时,此对话框阻止他在您的应用程序中执行某些操作(例如,需要从服务器获取一些数据)。

为了在任务完成后继续执行代码,您需要覆盖/实现它的onPostExecute方法,以了解何时可以继续执行。

答案 1 :(得分:1)

使用AsyncTask,在doInBackground()中执行网络I / O,然后将[您的onCreate方法中的其他代码“移至onPostExecute()的{​​{1}} 。

答案 2 :(得分:1)

从4.0开始,您无法在主线程上执行网络操作,因此您应该考虑AsyncTask或Thread