【问题标题】:Android onPostExecute not been recognizeAndroid onPostExecute 无法识别
【发布时间】:2015-11-09 17:25:09
【问题描述】:

这是我的代码:

//.___ Async task bring info from API __./
AsyncTask asyncTask = new AsyncTask() {
    @Override
    protected Object doInBackground(Object[] objects) {
        mMovieDto = mDataSource.getPopularMovies();
        return null;
    }

    @Override
    protected void onPostExecute(Long result) {
        fillList();
    }
};
asyncTask.execute();

我收到onPostExecute 没有从 super 覆盖的错误,女巫是将这个方法之王添加到我的AsyncTask 的正确方法?

感谢您的帮助 何塞

【问题讨论】:

  • 显示 AsyncTask 定义中的参数。就像现在一样,您的 onPostExecute() 需要接受一个 Object 参数,因为这就是 doInBackground() 返回的内容。
  • 成功了!请发表您的评论作为答案,我会接受。
  • 如果您希望它在 PostExecute 上返回 Long 结果,则将您的 AsyncTask asyncTask = new AsyncTask() 更改为 AsyncTask asyncTask = new AsyncTask();

标签: java android multithreading rest oop


【解决方案1】:

您缺少 AsyncTask 的泛型类型:

异步任务使用的三种类型如下:

  1. Params,执行时发送给任务的参数类型。
  2. 进度,在后台计算期间发布的进度单元的类型。
  3. Result,后台计算结果的类型。

并非所有类型都始终被异步任务使用。要将类型标记为未使用,只需使用类型 Void:

private class MyTask extends AsyncTask<Void, Void, Void> { ... }

像这样更改您的代码:

AsyncTask asyncTask = new AsyncTask<Void, Void, Void>() {

    @Override
    protected Void doInBackground(Void... params) {
        mMovieDto = mDataSource.getPopularMovies();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        fillList();
    }
};
asyncTask.execute();

【讨论】:

  • 不应该改成AsyncTask&lt;Object[],Void,Long&gt;吗?这将与 OP 在他的问题中所要使用的参数相匹配。
  • 在我看来,他没有使用任何参数,也没有导致他的示例代码。它们没用,我认为最好的解决方案是使用Void
猜你喜欢
  • 2015-12-09
  • 2023-03-09
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多