Проблемы с AsyncTask - PullRequest
       27

Проблемы с AsyncTask

3 голосов
/ 02 апреля 2011
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 (Context, CharSequence, int) в типе Toast не применим для аргументов (CheckTask, String, int)

Я пыталсяпоиск некоторых основных учебных пособий, и они используют Toast.makeText так же, как и выше.Я не уверен, что случилось.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 02 апреля 2011

Это потому, что вы передаете экземпляр объекта 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 голосов
/ 02 апреля 2011

Вместо передачи CheckTask.this, просто используйте this или this.getContext().

...