我正在创建异步任务,检索字符串数据:
View.OnClickListener btnClk = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (btnGetData.getId() == ((Button) v).getId()) {
Object obj = new FetchTask(Main.this).execute((Integer) null);
}
}
};
我的任务:
public class FetchTask extends AsyncTask<Object, Object, Object> {
private Context ctx;
private String xml;
public FetchTask(Context context) {
ctx = context;
}
@Override
protected void onPreExecute() {
DialogDownload_Ring = ProgressDialog.show(Main.this, "Download...",
"Fetching XML data...");
DialogDownload_Ring.setCancelable(true);
DialogDownload_Ring.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
cancel(true);
}
});
super.onPreExecute();
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(Object result) {
if (result instanceof Exception) {
DialogDownload_Ring.setMessage("Download failed!");
} else {
DialogDownload_Ring.setMessage("Succesfully Downloaded!");
}
DialogDownload_Ring.dismiss();
super.onPostExecute(result);
}
@Override
protected Object doInBackground(Object... params) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL_Local);
HttpResponse httpResponce = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponce.getEntity();
xml = EntityUtils.toString(httpEntity);
return xml;
} catch (Exception e) {
return e;
}
}
}
如何从对象 obj 中检索 xml 数据? obj.toString() 不起作用。否则我创建 asynctask 字符串属性(扩展 AsyncTask String、String、String)它正在工作,但进度条在检索 xml 数据后启动,我也不明白。请帮帮我。 附:抱歉我的英语不好..
最佳答案
如果您想在 doInBackground 执行完成后在主 ui 线程中获取结果,则需要通过调用 AsyncTask.get() 来执行 AsyncTask方法,但这将卡住 UI 线程,直到 doInBackground 执行完成。您需要在线程内调用 AsyncTask.get()
以避免 UI 卡住。启动 AsyncTask
以将结果返回到 UI 线程:
Object obj = new FetchTask(Main.this).execute((Integer) null).get();
第二种方法是启动 AsyncTask,而不调用 AsyncTask.get
方法,并在 doInBackground
执行完成时在 onPostExecute
方法中接收结果。
单击按钮时启动 AsyncTask:
new FetchTask(Main.this).execute((Integer) null);
在onPostExecute
中获取结果为:
@Override
protected void onPostExecute(Object result) {
// extract xml from result
super.onPostExecute(result);
}
关于android - 从 AsyncTask 检索对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807028/