Android 使用从 Async 返回的类对象


private class QueryResult {
    List<String> name = new ArrayList<>();
    List<String> location = new ArrayList<>();
    List<String> type = new ArrayList<>();
    List<Calendar> end = new ArrayList<>();
    List<Calendar> start = new ArrayList<>();
    public QueryResult( List<String> name,List<String> location,List<String> type, List<Calendar> end, List<Calendar> start ) {
        this.name=name;
        this.location=location;
        this.type=type;
        this.end=end;
        this.start=start;
    }

我想返回 5 个数组列表,所以我返回

return new QueryResult(namee,locationn,typee,end,strt);

此查询结果类在异步类中是私有的。

我在主活动中称之为异步,在oncreate中。但我不能使用数组列表。因为这是私人课程,我只能这样

 Object obj= new RetrieveFeedTask().execute().get();

但我不能用那个对象做任何事情。 我应该公开类以使用该数组吗? 什么是解决方案? 还是我应该返回多个不同类型的数组用不同的方法?我找不到。我无法检索这些数组

我在 doinbackground 中返回这些数组,但我认为哪种异步方法现在并不重要。

从异步任务中检索对象值

这不起作用,因为它在写入主活动或主活动时出错。

我上了公开课,我得到了getter,但仍然没有工作

首先,永远不要调用 AsyncTask.execute.get。 这样做消除了使用 AsyncTask 的全部原因和优势,并且在 99.9% 的情况下都是错误的。 它会冻结您的手机,使其无响应。

onCreate有一个看门狗计时器,你可以触发计时器,你的应用程序将被终止。

使用 AsyncTask 的正确方法是将所有需要任务结果的代码放在 onPostExecute 函数(或从那里调用的函数(中。 不要把它放在调用 execute 之后,也不要调用 get 来获取结果。 然后只调用 AsyncTask.execute((。

有 1 或两个例外,但如果你没有足够的知识来自己回答这个问题,那么你还没有到可以正确确定这些例外的地步——所以不要这样做。

最新更新