NetworkOnMainThreadException 但使用 AsyncTask

NetworkOnMainThreadException but Using AsyncTask

我编写了一个 class 代码,它启动一个 http 连接以获取例如网站。 我使用了 AsyncTask,但出现了 NetworkOnMainException。你可以帮我吗? class

public class getXMLData extends AsyncTask<String, Void, String> {
TextView _textview;

public getXMLData(TextView textview) {
    _textview = textview;
}

protected String doInBackground(String... url)
{
    String _text = "";
    try {
        try {
            URL _url = new URL(url[0]);
            HttpURLConnection con = (HttpURLConnection) _url.openConnection();
            _text = readStream(con.getInputStream());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return _text;
}

protected void onPostExecute(String result)
{
    _textview.setText(result.toCharArray(), 0, result.length());
}


private String readStream(java.io.InputStream in) {
    java.io.BufferedReader reader = null;
    String result = "";
    reader = new BufferedReader(new InputStreamReader(in));
    try {
        while ((reader.readLine() != null)) {
            result = result + reader.readLine();
        }
    }
    catch (java.io.IOException i)
    {

    }
    finally
    {
        try {
            reader.close();
        }
        catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
    return result;
}

这是我启动 AsyncTask 的方式:

bu_aktualize.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          _getXMLData.doInBackground("http://www.google.de");

        }
    });

感谢您的帮助。

您没有给自己打电话 doInBackground()。相反,您调用 execute()executeOnExecutor() 来启动 AsyncTask.

您可能希望查看 the documentation for AsyncTask,其中显示了设置 AsyncTask 的示例,包括对 execute() 的调用。