当前位置: 首页 > 知识库问答 >
问题:

从asynctask获取结果并处理它[duplicate]

濮佑运
2023-03-14

我看到了很多关于从异步任务中获取结果的问题,但没有一个解决了我的问题。我想做的是从MyClass对象的异步任务数组中获取并在UI中使用它们,但在不同的情况下我有不同的UI。有时我用我的数组填充recyclerview,有时我用我的数组填充无尽的选项卡活动。这意味着我不能将UI元素传递给异步任务,以便在onPostExecute()中处理它。我想从异步任务中得到的结果正是MyClass对象的数组,然后在不同的情况下以不同的方式使用它。还有一件很重要的事情是,我应该只在AsyncTask执行之后才填充我的UI(因为如果它还在执行,我就没有数据来填充UI了),所以我不能简单地编写类似于

MyClass[] result = new MyAsyncTask().execute().getResult()
MyUI.fillWith(result)

因为我很可能会得NPE。

共有1个答案

荆梓
2023-03-14

不是直接将UI元素传递给AsyncTask,而是创建一个接口,表示任务完成后要执行的操作:

public interface MyTaskHandler {
  void onComplete(MyClass[] results);
}

并使任务接受此接口并在OnPostExecute调用它:

public class MyTask extends AsyncTask<..., ..., MyClass> {
  private MyTaskHandler myTaskHandler;

  public MyTask(MyTaskHandler myTaskHandler) { 
    this.myTaskHandler = myTaskHandler;
  }

  @Override
  public void onPostExecute(MyClass[] results) {
    myTaskHandler.onComplete(results);
  }
}

(在实际实现中,当您的活动被破坏时,您需要使用WeakReferences或null out引用,就像您对视图所做的那样,因为您的处理程序将生成对某个视图的引用)

然后可以根据您想要做的事情传递MyTaskHandler的不同实现:

public class MyActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    new MyAsyncTask(new MyTaskHandler() {
      @Override
      public void onComplete(MyClass[] results) {
        // load into list view
      }
    }).execute();

    new MyAsyncTask(new MyTaskHandler() {
      @Override
      public void onComplete(MyClass[] results) {
        // load into tabs
      }
    }).execute();
  }
}
 类似资料:
  • 我需要迭代resultset中返回的数百万条记录,并对它们进行处理,然后将它们存储在某些数据结构中。我没有找到任何相关的例子或参考。JOOQ似乎在做一些我可能想要的事情,但它似乎不是免费的。我希望,如果使用Java8流,我可能能够实现它,但示例或writeup似乎没有给我任何方向。我也愿意接受其他选择 基于这个SO参考:resultset parallel,我在下面进行了尝试,但它没有给我任何性能

  • 目前,我在主activity类和widget类中都声明了一个AsyncTask。除了中的结果处理之外,其他代码都是一样的(在activity中,检索到的结果转到activity中的textview,而在小部件中,它转到my widget中的textview)。 我想将移动到一个外部java文件中(以避免代码重复),并通过不同的结果处理方式从其他不同的类(如我的小部件和main activity)调

  • 问题内容: 我如何得到一个数组的结果? 我有一个像这样的数组: 并将其保存在数据库中,例如JSON编码: 现在我想再次从数据库中获取数组。但是当我使用时: 我得到: 而不是数组。如何获取数组而不是对象? 问题答案: 将第二个参数设置为true以强制关联数组:

  • 问题内容: 当我在BigQuery Web UI中运行查询时,结果显示在一个表中,在该表中,每个字段的名称和类型均已知(即使字段是COUNT(),AVG(),…操作,类型领域当然是已知的)。然后可以将结果直接导出为table / json / csv。 我的问题是,当我在Java项目中检索查询结果时,例如使用查询: …可以在不显式定义的情况下在PCollection中获取TableRow的架构吗?

  • 问题内容: 我正在尝试使用PDO从表中检索数据,只是我似乎无法向浏览器输出任何内容,只是得到了一个纯白页。 问题答案: 例。 这是您的dbc类 您的PHP页面: