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。我不确定是不是错了。
谢谢。
答案 0 :(得分: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();
}
}
}
}
答案 1 :(得分:0)
不要传递CheckTask.this
,只需使用this
或this.getContext()
。