1

次のコードにコンパイルしようとすると、2つのエラーが発生します。

説明リソースパスの場所タイプトークン「void」の構文エラー、無効な式AsyncTask.java /AsyncTask Project/src/org/me/asynctaskの行19Javaの問題

説明リソースパスロケーションタイプタイプAsyncTaskはジェネリックではありません。<TextView, Void, Void> AsyncTask.java /AsyncTask Project/src/org/me/asynctask25行目の引数でパラメータ化することはできませんJavaの問題

package org.me.asynctask;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.os.*;
public class AsyncTask extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView mytextview = new TextView(this);
        TextView secondtextview = new TextView(this);

        new MyAsyncClass().execute(mytextview, void, secondtextview);
    }

    private class MyAsyncClass extends AsyncTask<TextView, Void, Void> {
    protected TextView doInBackground(TextView tv)
    {
        tv.setText("Your AsyncTask was successful!");
        return tv;
    }

    protected void onPostExecute(TextView Result)
    {
        Context context = context.getApplicationContext();
        Toast mytoast = Toast.makeText(context, "AsyncTask processing complete", Toast.LENGTH_LONG);
        mytoast.show();
    }
}

明らかAsyncTaskにジェネリック(http://developer.android.com/reference/android/os/AsyncTask.html#execute(Params ...)) なので、なぜこれらのエラーが発生するのですか?

4

2 に答える 2

5

間違ったタイプでAsyncTaskメソッドをオーバーライドしています。これは次のように定義されます。

AsyncTask<Params, Progress, Result>

doInBackgroundメソッドは、保護された抽象結果doInBackground(Params ... params)として定義されます。

したがって、定義によれば、Void doInBackround(TextView ... params);を保護する必要があります。

onPostExecuteも誤って定義されています。

于 2010-07-18T22:53:26.540 に答える
3

いくつかの問題があり、そのうちの2つは次のとおりです。

  1. AsyncTaskを非表示/衝突するクラスを定義しましたandroid.os.AsyncTask。多分あなたはそれをAsyncTaskDemo.javaまたはAsyncTaskActivity.javaか何かと呼ぶつもりでした。

  2. tv.setTextの内部を呼び出して、バックグラウンドスレッドからUIを変更しようとしていますdoInBackground。それはの目的を打ち負かしAsyncTaskます。コードインdoInBackgroundはメイン(または「UI」)スレッドに触れてはいけません。内のタスク中の更新にはdoInBackground、を使用しますAsyncTask.publishProgress

于 2010-07-30T03:13:22.800 に答える