3
package com.example.helloandroid;

import java.io.File;

import android.os.AsyncTask;
import android.os.Environment;
import android.widget.Toast;

public class CheckTask extends AsyncTask<Void, Void, Boolean> {



protected Boolean doInBackground(Void... params) {
    while (true) {
        if (Environment.MEDIA_MOUNTED.equals(Environment
                .getExternalStorageState())) {
            // access external file
            String f = Environment.getExternalStorageDirectory()
                    + "/schedule.rtf";
            File s = new File(f);
            if (s.exists()) {
                return true;

            }

        }
    }

}

protected void onPostExecute(Boolean result) {
    if (result == true) {


         Toast.makeText(CheckTask.this, "Hello", Toast.LENGTH_SHORT).show();

    }
}
}

次のエラー メッセージが表示され続けます: Toast 型のメソッド makeText(Context, CharSequence, int) は、引数 (CheckTask, String, int) には適用できません

いくつかの基本的なチュートリアルを検索してみましたが、上記と同じ方法で Toast.makeText を使用しています。何が悪いのかわかりません。

ありがとうございました。

4

2 に答える 2

4

これは、CheckTask オブジェクト インスタンスを makeText に渡しているためです。アクティビティのインスタンス/コンテキストを渡す必要があります。

AsyncTask は実際のアクティビティの内部クラスですか? それが、以下の例がどのように機能するかであり、他の人のコードを見ると、それがどのように行われるかを常に見てきました。

これが実際の例です。パッケージ名は無視してください。しばらく前に歩数計を作成して遊んでいましたが、そのプロジェクトを再利用してこれを行いました。

package jm.pedometer;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;

public class MainView extends Activity {
    Chronometer mChronometer;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mChronometer = (Chronometer)findViewById(R.id.Chronometer01);
    mChronometer.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/digital_clock.ttf"));

    CheckTask testTask = new CheckTask();
    testTask.execute();
}


/*
 * This AsyncTask is an inner class within an Activity
 */
public class CheckTask extends AsyncTask<Void, Void, Boolean> {
protected Boolean doInBackground(Void... params) {
    return true;
}

protected void onPostExecute(Boolean result) {
    if (result == true) {
    Toast.makeText(MainView.this, "Hello", Toast.LENGTH_SHORT).show();
    }
    }
  }
}
于 2011-04-02T00:34:13.353 に答える
0

を渡す代わりに、またはCheckTask.thisを使用します。thisthis.getContext()

于 2011-04-02T00:50:35.853 に答える