0

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

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

2 回答 2

0

您可以从 AsyncTask 创建一个接口并返回值onPostExecute(),或者您可以注册一个 BroadcastReceiver 并从onPostExecute()AsyncTask 的方法中触发。我使用 Interface 和 BroadcastReceiver 创建了一个演示,您可以下载并检查它。

于 2013-08-02T10:16:21.257 回答
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() );
}

在这种情况下,您对 Async Task 的调用将如下所示:

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 实现且没有 observable 的快速而简单的解决方案。

于 2013-08-02T10:23:58.083 回答