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()
的调用。
我编写了一个 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()
的调用。