Android 如何在启动时连接URL而不出现NetworkOnMainThreadException

Android 如何在启动时连接URL而不出现NetworkOnMainThreadException,android,Android,我正在尝试开发一个Android应用程序,它首先连接到我的web实例并获取启动信息,然后根据该信息启动我的应用程序 我曾尝试在onCreate方法中编写URL连接代码,但当我运行应用程序时,它会引发NetworkOnMainThreadException protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); StartUp startUp = new Sta

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


我该怎么做?

使用
异步任务,在
doInBackground()
中执行网络I/O,并将“onCreate方法中的其他代码”移动到
异步任务的
onPostExecute()

使用
AsyncTask
,在
doInBackground()
中执行网络I/O,并将“onCreate方法中的其他代码”移动到
AsyncTask
onPostExecute()

你不能在主线程上执行网络操作,所以你应该考虑异步任务或线程

4,你不能在主线程上执行网络操作,所以你应该考虑异步任务或线程

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

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

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


为了在任务完成后继续执行代码,您需要重写/实现它的方法,以知道何时可以继续。

是,您可以在主线程中对旧版本(