android.os.NetworkOnMainThreadException和not fix with AsyncTask(jsoup)

android.os.NetworkOnMainThreadException和not fix with AsyncTask(jsoup),android,android-asynctask,jsoup,networkonmainthread,Android,Android Asynctask,Jsoup,Networkonmainthread,尝试在web视图中显示web的某些特定部分并使用jsoup库,因此选择我想要的div,这是我的代码: public class MainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout

尝试在web视图中显示web的某些特定部分并使用jsoup库,因此选择我想要的div,这是我的代码:

public class MainActivity extends AppCompatActivity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);
        WebView webView = (WebView) findViewById(R.id.web);
        webView.getSettings().setJavaScriptEnabled(true);

        try {
            Document document = Jsoup.connect("http://www.memaraneha.ir").get();
            Element elements=document.select("div.news-list").first();
            String html = elements.toString();
            String mime = "text/html";
            String encoding = "utf-8";
            webView.loadData(html, mime, encoding);
        } catch (IOException e) {
            e.printStackTrace();
        }

}}
但是当运行时,它得到了这个错误:android.os.NetworkOnMainThreadException

经过一些研究,我知道这是什么错误,以及必须如何解决这个问题,将代码放入AsyncTask函数中。我尝试了这个方法,但不起作用,似乎不可能将此jsoup代码放入AsyncTask,或者我不知道必须如何做


如果有人能帮忙的话。

你不能在主线程上执行网络调用,这在android上已经存在了好几年了(从API 11开始),这是有原因的

如果您在主线程上执行网络调用,您将导致ANR和跳过帧,并且您的用户将卸载您的应用程序

您应该在后台线程上使用任何发送请求的方法(无论是
AsyncTask
还是任何网络库)


要了解更多信息,请阅读

您无法在主线程上执行网络调用,这在android中已经存在了几年(自API 11以来),这是有充分理由的

如果您在主线程上执行网络调用,您将导致ANR和跳过帧,并且您的用户将卸载您的应用程序

您应该在后台线程上使用任何发送请求的方法(无论是
AsyncTask
还是任何网络库)


有关更多信息,请阅读使用Asynctask加载文档

public class MainActivity extends AppCompatActivity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);
        WebView webView = (WebView) findViewById(R.id.web);
        webView.getSettings().setJavaScriptEnabled(true);

        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String html = "";
                try {
                    Document document = Jsoup.connect("http://www.memaraneha.ir").get();
                    Element elements=document.select("div.news-list").first();
                    html = elements.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return html;
            }

            @Override
            protected void onPostExecute(String html) {
                String mime = "text/html; charset=utf-8";
                String encoding = "utf-8";
                webView.loadData(html, mime, encoding);
            }
        }.execute();

}}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_页面);
WebView WebView=(WebView)findviewbyd(R.id.web);
webView.getSettings().setJavaScriptEnabled(true);
新建异步任务(){
@凌驾
受保护的字符串背景(无效…无效){
字符串html=“”;
试一试{
Document Document=Jsoup.connect(“http://www.memaraneha.ir).get();
Element=document.select(“div.news-list”).first();
html=elements.toString();
}捕获(IOE异常){
e、 printStackTrace();
}
返回html;
}
@凌驾
受保护的void onPostExecute(字符串html){
String mime=“text/html;charset=utf-8”;
字符串编码=“utf-8”;
loadData(html、mime、编码);
}
}.execute();
}}

使用Asynctask加载文档

public class MainActivity extends AppCompatActivity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);
        WebView webView = (WebView) findViewById(R.id.web);
        webView.getSettings().setJavaScriptEnabled(true);

        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String html = "";
                try {
                    Document document = Jsoup.connect("http://www.memaraneha.ir").get();
                    Element elements=document.select("div.news-list").first();
                    html = elements.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return html;
            }

            @Override
            protected void onPostExecute(String html) {
                String mime = "text/html; charset=utf-8";
                String encoding = "utf-8";
                webView.loadData(html, mime, encoding);
            }
        }.execute();

}}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_页面);
WebView WebView=(WebView)findviewbyd(R.id.web);
webView.getSettings().setJavaScriptEnabled(true);
新建异步任务(){
@凌驾
受保护的字符串背景(无效…无效){
字符串html=“”;
试一试{
Document Document=Jsoup.connect(“http://www.memaraneha.ir).get();
Element=document.select(“div.news-list”).first();
html=elements.toString();
}捕获(IOE异常){
e、 printStackTrace();
}
返回html;
}
@凌驾
受保护的void onPostExecute(字符串html){
String mime=“text/html;charset=utf-8”;
字符串编码=“utf-8”;
loadData(html、mime、编码);
}
}.execute();
}}

我知道应该使用AsyncTask,但我尝试了很多次,试图将jsoup代码放入AsyncTask中,但似乎不起作用可能jsoup不是用于联网的合适库,您是否尝试过使用或?我知道应该使用AsyncTask,但我尝试过很多次,试图将jsoup代码放入AsyncTask中,但似乎不起作用可能jsoup不是用于网络的合适库,您是否尝试过使用或?无法识别onPostExecute中的webview,然后给出.execute()的错误;将Webview更改为finalok Webview错误消失。但是为.execute()指定错误;在onPostExecute中。对于“接受您的答案”,请编辑您的代码,并显示如何在create meathodIt中调用asynctask以执行asynctask。您可以看到;在代码末尾。Change Document Document=Jsoup.connect(“*1000”).get();无法识别onPostExecute中的webview,在此之后为.execute()提供错误;将webview更改为finalok webview错误消失。但为.execute()提供错误;在onPostExecute中。对于接受您的答案,请编辑您的代码并显示如何在create meathodIt中调用asynctask以执行asynctask。您可以在代码末尾看到.execute();更改文档文档=Jsoup.connect(“*1000).get();