我正在尝试使用AsyncTask
类来获取网站的内容。 logcat 告诉我W/art: Suspending all threads took: 15(or any other number)ms
反复。我的应用程序被冻结,直到日志消息打印完成。日志完成后将显示 UI。我遵循了教程并仔细检查了我的代码应该与教程相同。一段时间后,它从网站记录了几行代码,但仅此而已。我也尝试过不同的网站。这是我的异步任务:
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DownloadTask task = new DownloadTask();
String result = null;
try {
result = task.execute("http://www.vg.no/").get();
Log.i("URL content" , result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
下面这行是有问题的:
result = task.execute("http://www.vg.no/").get();
The .get()
该语句的一部分意思是“等待任务完成”。这会在任务执行时有效地阻塞 UI 线程。
只需让后台任务完成其工作并通过以下方式返回任何结果onPostExecute()
。查看以下 AsyncTask:
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
...
}
@Override
protected void onPostExecute(String result) {
Log.i("URL content" , result);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DownloadTask task = new DownloadTask();
task.execute("http://www.vg.no/");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)