10

「doInBackground」と呼ばれる関数を使用する GCM の 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);
}

しかし、独自のコードをEclipseにコピーして貼り付けると、doInBackgroundを実装していないと不平を言います。これは、doInBackground が "Object" の入力パラメーターを持つことを期待しており、その入力パラメーターが void であるため、定義されているものを認識していないためです。ここで、非同期タスクをクラスとして宣言する場合は<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 に答える