`AsyncTask`不接受void类型的`doInBackground()`?

时间:2016-08-17 10:05:35

标签: android android-asynctask

Google's Android Documentation看,我们看到了

  

Params ,执行时发送给任务的参数类型。

     

进度,后台计算期间发布的进度单位的类型。

     

结果,后台计算结果的类型。

this中也提到了很好的答案。

但是,为什么将Void作为结果类型导致Android Studio在doInBackground行上发出以下警告:

doInBackground(String...)' in '(..)MainActivity.myTask' clashes with 'doInBackground(Params...)' in 'android.os.AsyncTask'; attempting to use incompatible return type

这是AsyncTask的声明方式:

private class myTask extends AsyncTask<String,Void,Void> {
    @Override
    protected void doInBackground(String... url) {
        //do stuff with url[0]
    }

    @Override
    protected void onPostExecute() {
        //more stuff
    }
}

相比之下,这似乎工作正常:

private class myTask extends AsyncTask<String,Void,String> {
    @Override
    protected String doInBackground(String... url) {
        //do stuff with url[0]
        return "hi";
    }

    @Override
    protected void onPostExecute(String result) {
        //more stuff
    }
}

请注意,有关此主题的各种问题,但大多数问题只是弄乱了AsyncTask参数或参数,并在类中返回值。

1 个答案:

答案 0 :(得分:5)

试试这段代码

 private class myTask extends AsyncTask<String,Void,Void> {
    @Override
    protected Void doInBackground(String... url) {
          //do stuff with url[0]
        return null;

    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        //more stuff
    }
}