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,只需使用thisor this.getContext()

于 2011-04-02T00:50:35.853 回答