2011-04-02 67 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