NetworkOnMainThreadException但使用AsyncTask

时间:2015-02-25 22:43:37

标签: java android android-asynctask

我编写了一个类,该类启动一个http连接以获取例如网站。 我使用AsyncTask但我得到了NetworkOnMainException。你能救我吗? 班级

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");

        }
    });

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您不要自己致电doInBackground()。相反,您可以致电execute()executeOnExecutor()来启动AsyncTask

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