东芝Thrive选项卡上的android.os.NetworkOnMainThreadException,但三星Duos智能手机上没有
在“onCreate”方法中,我有一行代码东芝Thrive选项卡上的android.os.NetworkOnMainThreadException,但三星Duos智能手机上没有,android,exception,tabs,smartphone,Android,Exception,Tabs,Smartphone,在“onCreate”方法中,我有一行代码 Drawable.createFromStream(((java.io.InputStream) new java.net.URL(url).getContent()), ""); 当我在智能手机(三星Duos)上运行它时,它工作得很好。但当我在东芝Thrive平板电脑上运行它时,我得到了“android.os.NetworkOnMainThreadException”异常。 为什么会发生这种情况?将出现在android操作系统>=3.0上 因此,在
Drawable.createFromStream(((java.io.InputStream) new java.net.URL(url).getContent()), "");
当我在智能手机(三星Duos)上运行它时,它工作得很好。但当我在东芝Thrive平板电脑上运行它时,我得到了“android.os.NetworkOnMainThreadException”
异常。为什么会发生这种情况?将出现在android操作系统>=3.0上
因此,在较新版本的Android中,请始终在中运行您的web请求,因为
3.0
,您无法在主UI线程上运行网络活动。
这些都会自动终止,因为这会导致糟糕的用户体验
当应用程序尝试执行异常时引发的异常
在其主线程上进行网络操作
这仅适用于针对蜂巢SDK或
较高的。允许针对早期SDK版本的应用程序执行以下操作
在他们的主事件循环线程上建立网络,但它非常复杂
气馁
在不同的线程上运行,可能使用
我希望这个例子能对你有所帮助
private class BackgroundLoginTask extends
AsyncTask<InputStream, Void, Boolean> {
@Override
protected void onPreExecute() {
// do something before..
// Disable the UI-Elements during the login progress
pbar.setVisibility(View.VISIBLE);
editPassword.setEnabled(false);
editUsername.setEnabled(false);
btnLogin.setEnabled(false);
}
@Override
protected Boolean doInBackground(final InputStream... params) {
//do the network access
}
@Override
protected void onPostExecute(final Boolean parsingError) {
// enable the UI-Elements when the login was successful
editPassword.setEnabled(true);
editUsername.setEnabled(true);
btnLogin.setEnabled(true);
// hide the progress bar
pbar.setVisibility(View.INVISIBLE);
}
}
public final void login(final View view) {
BackgroundLoginTask task = new BackgroundLoginTask();
task.execute();
}