0

我正在尝试开发一个 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 连接的输出。

我怎样才能做到这一点 ?

4

3 回答 3

2

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

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

于 2013-09-17T13:44:06.947 回答
1

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

于 2013-09-17T13:20:01.967 回答
1

使用AsyncTask,在 中进行网络 I/O doInBackground(),然后将“[您的] onCreate 方法中的其他代码”移动onPostExecute()AsyncTask.

于 2013-09-17T13:13:46.063 回答