Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在AsyncTask中调用返回值函数_Android_Android Asynctask - Fatal编程技术网

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

Android 如何在AsyncTask中调用返回值函数,android,android-asynctask,Android,Android Asynctask,我不熟悉AndRoid编程,我刚刚遇到了一个问题,在AsyncTask的doInBackground()中调用返回值函数 简单的问题是如何等待AsyncTask完成,然后在不冻结UI的情况下执行return语句,我也研究了onPostExecute(),但它并没有解决问题。 下面是示例代码 public String hello() { String result = null; //calling asynctaske execute method retrun resul

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

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

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

对于我自己,我使用一个回调函数,在onPostExecute之后调用它

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


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

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.


注意:这是一个快速而直接的解决方案,带有一个注释性的观察者实现,并且没有可观察的对象。

这违背了异步任务的目的。您不会返回任何内容,因为任务可能会在稍后时间结束。让hello方法启动AsyncTask,onPostExecute()在UI线程上运行一些东西,修改显示输出所需的任何内容。因此hello()不能有返回类型。一旦asychtask完成,onPostexecute()方法将被调用。因此,您可以在onPostexecute()中分配值。我已经分配了,但是如何告诉下一个语句执行,除了while(result==null){},因为它冻结了解决方案中的UIZ,您已经在asyncTask之后直接完成了工作,但我必须向调用函数返回一个字符串,然后它将在iti上完成它的工作。我不理解,在Asynconus线程启动时执行.execute(..)之后的代码,在异步任务完成后执行方法update(..){}中的代码
@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.