我之前没有使用AsyncTask,也没有理解有关它的一些教程,所以我真的不知道如何将它应用于HttpClient执行。请帮助我完成这种实现,这是最初的代码:
public void commandModule(String url) {
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(new HttpGet(url));
} catch (Exception e) {
}
}
@Override
public void onClick(View v) {
if (checkBox1.isChecked()) {
commandModule("http://192.168.1.102/?command1");
} else {
commandModule("http://192.168.1.102/?command2");
}
if (checkBox2.isChecked()) {
commandModule("http://192.168.1.102/?command3");
} else {
commandModule("http://192.168.1.102/?command4");
}
}
答案 0 :(得分:1)
如果您了解java中的Thread,您将很容易理解android中的Async Task的工作情况。基本上,你不能在android的主线程上执行任何长时间运行的任务。它将阻止主要主线程,你将得到ANR(Applicaton not responding)错误。要避免这种情况,您可以使用线程或异步任务。 线程有一个限制,你无法更新任何其他线程的UI线程。因此,要更新UI,您需要使用处理程序将消息发送到main / UI线程。每次使用线程实现某些操作时,您都必须这样做。 为了简化,android框架提供了异步任务。
所以,你应该在线程的run()
方法中放入什么,应该进入doInBackground()
方法。
答案 1 :(得分:0)
public void commandModule(String url) {
new RequestTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,url);
}
private class RequestTask extends AsyncTask<String,Void,Void>{
protected void doInBackground(String... args){
String url=args[0];
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(new HttpGet(url));
} catch (Exception e) {
}
}
}
答案 2 :(得分:0)
AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。 查看本教程,它将提供有关您的查询的提示http://programmerguru.com/android-tutorial/android-asynctask-example/
答案 3 :(得分:0)
AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
public void commandModule(String url) {
try {
new RequestTask().execute(url);
} catch (Exception e) {
}
}
@Override
public void onClick(View v) {
if (checkBox1.isChecked()) {
commandModule("http://192.168.1.102/?command1");
} else {
commandModule("http://192.168.1.102/?command2");
}
if (checkBox2.isChecked()) {
commandModule("http://192.168.1.102/?command3");
} else {
commandModule("http://192.168.1.102/?command4");
}
}
private class RequestTask extends AsyncTask<String,Void,Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected void doInBackground(String... args){
String url=args[0];
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(new HttpGet(url));
} catch (Exception e) {
}
}
@Override
protected void onPostExecute() {
}
}