10

我正在关注 GCM 上的 android 教程,该教程使用了一个名为“doInBackground”的函数,他们定义了这个函数,如下所示:

private void registerInBackground() {
    new AsyncTask() {
        @Override
        protected String doInBackground(Void... params) {
            //do stuff
        }
        @Override
        protected void onPostExecute(String msg) {
            //do stuff
        }
    }.execute(null, null, null);
}

但是当我将他们自己的代码复制并粘贴到eclipse中时,它抱怨说我没有实现doInBackground。这是因为它期望 doInBackground 具有“对象”的输入参数,并且它无法识别定义的参数,因为它的输入参数是空的。现在,如果我将异步任务声明为一个类,我会放在<Void, Void, String>它前面,这会告诉编译器我希望我的 doInBackground 有 Void 作为输入。但是当我这样放在<Void, Void, String>“new AsyncTask()”前面时:

    private void registerInBackground() {
    new AsyncTask() <Void, Void, String>{

我得到编译器错误:

Syntax error on tokens, delete these tokens
4

2 回答 2

28

您应该()在参数类型规范之后:

new AsyncTask<Void, Void, String>() { /*Your code(e.g. doInBackground )*/ }.execute();  
于 2013-09-09T20:55:34.683 回答
10

尝试这个:

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

    @Override
    protected Void doInBackground( Void... voids ) {
        //Do things...
        return null;
    }
}.execute();
于 2013-09-09T21:22:05.217 回答