android - 从 AsyncTask 检索对象值

标签 android android-asynctask

我正在创建异步任务,检索字符串数据:

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/

相关文章:

java - 向 arrayList 添加标记会导致应用程序崩溃

android - 处理新版本 Android(3.x 及更高版本)中缺少的 MENU 按钮

支持库中的 Android CalendarView

java - 用于 Fragment 的 AsyncTask 结果

java - 如何更改进度对话框文本

Android 测试 - 如何同步 AsyncTask

android - Places Api 在 android 中停止工作

android - 如何检查 View 小部件的类型?

java - 如何在 ASyncTask 剥离完成后结束 Android 服务?

android - 在异步任务中更新 ListView 行