不能覆盖AsyncTask类中的onPostExecute()方法

时间:2015-03-07 04:33:43

标签: android android-asynctask return return-value

我知道有几个问题与这个问题非常相似,但到目前为止他们并没有帮助我。我仍然无法覆盖此AsyncTasks。 你能帮我吗?

我已经确定doInBackground()开发了一些onPostExecute()需要的类型(第一个是布尔值,第二个例子是JSON)。

除了我将AsyncTask扩展为原始类型(不确定要在此处输入内容)之外,您看到了什么吗?

这是eclipse告诉我的每个方法的错误:

  

Register.NetCheck类型的onPostExecute(Boolean)方法必须覆盖或实现超类型方法

并且eclipse的课程告诉我:

  
      
  • Register.NetCheck类型必须实现继承的抽象方法AsyncTask.doInBackground(Object ...)

  •   
  • AsyncTask是一种原始类型。应该是泛型类AsyncTask的引用    参数

  •   

示例1:

private class NetCheck extends AsyncTask {

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            do.something();
        }

        @Override
        protected Boolean doInBackground (String... args){
               if (do.something.worked){
                   return true; }
               else { return false}
        }

        @Override
        protected void onPostExecute(Boolean th){
            evalute.input.boolValue();
        }
    }

示例2:

private class ProcessRegister extends AsyncTask {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            show.some.dialog();
        }
        @Override
        protected JSONObject doInBackground(String... args) {
        JSONObject json = generate.some.json();
            return json;
        }
        @Override
        protected void onPostExecute(JSONObject json) {
           evaluate.something();
        }

}

2 个答案:

答案 0 :(得分:1)

您的异步任务不期望返回值,因此无法识别

protected void onPostExecute(Boolean th)

请改为尝试:

private class NetCheck extends AsyncTask<String, Void, Boolean> {

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        do.something();
    }

    @Override
    protected Boolean doInBackground (String... args){
           if (do.something.worked){
               return true; }
           else { return false}
    }

    @Override
    protected void onPostExecute(Boolean th){
        evalute.input.boolValue();
    }
}

对于第二个示例,将Boolean替换为JSONObject。尝试始终使用IDE自动为您实现这些方法,避免这样的问题。

答案 1 :(得分:1)

您应该使用类型扩展AsyncTask。见下面的例子。

public class MyTask extends AsyncTask<Void, String, Integer> {
    @Override
    protected Integer doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled(Integer integer) {
        super.onCancelled(integer);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }
}

用适当的类型替换Void,String,Integer。更多信息是here。 关于Eclipse。删除并安装Android Studio