【问题标题】:A `doInBackground()` of type void is not accepted by `AsyncTask`?`AsyncTask` 不接受 void 类型的`doInBackground()`?
【发布时间】:2016-12-23 22:22:53
【问题描述】:

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

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

Progress,后台计算时发布的进度单元的类型。

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

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 参数或类中的参数和返回值。

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    试试这个代码

     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
        }
    }
    

    【讨论】:

    • 哦,我不知道使用Void 传递null,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多