2011-04-02 66 views
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(); 

    } 
} 
} 

我不断收到以下错误信息: 方法makeText(上下文,CharSequence中,INT)在类型Toast是 不适用于参数(CheckTask,字符串,整数)问题用的AsyncTask

我试着搜索一些基本的教程,他们使用Toast.makeText和上面一样。我不知道什么是错的。

谢谢。

回答

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(); 
    } 
    } 
    } 
} 
+0

主要活动叫做HelloAndroid。如果我通过,我得到:没有封闭的类型HelloAndroid的实例可以在范围内访问 – shiraz 2011-04-02 00:41:17

+0

工作示例在一分钟内为您提供 – jmichalicek 2011-04-02 00:52:12

+0

主要活动不是上下文。 – Amplify91 2011-04-02 00:53:48

0

不是传递CheckTask.this的,只是使用thisthis.getContext()

+0

this.getContext:方法getContext()未定义类型 CheckTask ................... this:方法makeText(Context,CharSequence,int)in类型吐司是 不适用于参数(CheckTask,String,int) – shiraz 2011-04-02 00:57:07

+1

这将得到CheckTask的实例,它没有上下文 – jmichalicek 2011-04-02 01:04:00

+0

我的错误。我误解了你,并认为你正在尝试为第一个参数获取一个Context。无视这个答案。 – Amplify91 2011-04-02 03:47:34