以这种方式使用AsyncTask:"new AsyncTask(){"给了我错误

Sia*_*ash 10 android android-asynctask

我在GCM上使用了一个名为"doInBackground"的函数的android教程,他们将这个函数定义如下:

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);
}
Run Code Online (Sandbox Code Playgroud)

但是当我将自己的代码粘贴并粘贴到eclipse中时,它会抱怨并说我没有实现doInBackground.这是因为期望doInBackground具有"Object"的输入参数,并且它不识别由于其输入参数是void而定义的那个.现在,如果我将async任务声明为一个类,我会把它放在<Void, Void, String>它前面,这会告诉编译器我希望我的doInBackground将VOid作为输入.但是当我把<Void, Void, String>"新的AsyncTask()" 放在前面时:

    private void registerInBackground() {
    new AsyncTask() <Void, Void, String>{
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

Syntax error on tokens, delete these tokens
Run Code Online (Sandbox Code Playgroud)

Sco*_*eld 27

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

new AsyncTask<Void, Void, String>() { /*Your code(e.g. doInBackground )*/ }.execute();  
Run Code Online (Sandbox Code Playgroud)

  • 天哪,谢谢你,我快疯了! (2认同)

Jam*_*ken 10

试试这个:

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

    @Override
    protected Void doInBackground( Void... voids ) {
        //Do things...
        return null;
    }
}.execute();
Run Code Online (Sandbox Code Playgroud)