如何在AsyncTask中调用返回值函数

时间:2013-08-02 10:09:06

标签: android android-asynctask

我是andorid编程的新手我刚刚遇到一个问题,在AsyncTask doInBackground()中调用返回值函数 简单的问题是如何等待AsyncTask完成然后执行return语句而不冻结UI,我还研究了onPostExecute()但它并没有解决问题。 以下是示例代码

public String hello()  {
   String result = null;
   //calling asynctaske execute method
   retrun result;
}

2 个答案:

答案 0 :(得分:0)

您可以创建一个接口并从AsyncTask的onPostExecute()返回值,也可以注册一个BroadcastReceiver并从AsyncTask的onPostExecute()方法启动。我使用Interface和BroadcastReceiver创建了一个demo,您可以下载并检查它。

答案 1 :(得分:0)

对于我自己,我使用回调函数执行此操作,我在onPostExecute之后调用。

public AsyncUnzip(Activity ctx, Observer callback) {
    this.ctx = ctx;
    this.callback = callback;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dia = new ProgressDialog(ctx);
    dia.setTitle("Bitte warten");
    dia.setMessage("Geodatenpaket wird entpackt...");
    dia.setCancelable(false);
    dia.show();
}

@Override
public void onPostExecute( Boolean result ) {
    super.onPostExecute(result);
    dia.dismiss();
    callback.update(null, returnFolder);
    System.out.println("Unzipped to: " + returnFolder.getName() );
}

在这种情况下,您对异步任务的调用将如下所示:

AsyncUnzip unzipThread = new AsyncUnzip(ImportActivity.this, new Observer() {
    @Override
    public void update( Observable observable, Object data ) {//your code invoked after Async Task
} });
unzipThread.execute(selectedFile); //Start Unzip in external Thread.

注意:这是一个快速而简单的解决方案,具有匿名的Observer实现,没有可观察的。