东芝Thrive选项卡上的android.os.NetworkOnMainThreadException,但三星Duos智能手机上没有

东芝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上 因此,在

在“onCreate”方法中,我有一行代码

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();
}