Почему не работает сообщение «тост» в Android? Не могу исправить ошибку, пожалуйста, помогите! - PullRequest
0 голосов
/ 26 октября 2010

Представьте, что у меня есть следующий код, который работает в качестве фонового процессора для приложения Android:

public class Background extends Service 
{
    public void popup (String message, int duration)
    {
        Toast.makeText(this, message, duration).show();
    }

    class BackgroundChecker extends TimerTask 
    {
        public void run()
        {
            popup("Message!", Toast.LENGTH_LONG); // here
        }
    }
}

Когда он достигает всплывающего сообщения, например, // здесь, Android говорит мне принудительно выйтиЯ знаю, что проблема в контексте, то есть this, но я не знаю почему, потому что я расширил Service в этом классе, о котором мне сказал Android API.Можете ли вы помочь мне понять, почему это происходит и как это исправить?Кстати, вместо this я тоже использовал getApplicationContext(), но все равно вылетает = (.

Спасибо.

1 Ответ

1 голос
/ 26 октября 2010

Я не пробовал этого, но как насчет того, чтобы ваша служба указала активности выполнить тост, поскольку служба - это фоновая операция, кажется, что ее контекст не сработает для выполнения тоста.Можно попытаться расширить класс Application и создать там генератор тостов, а затем из вашего вызова службы.

ApplicationExtender variableName = (ApplicationExtender) Background.this.getApplication();              
variableName.toast("message");

Ваш ApplicationExtender:

public class ApplicationExtender extends Application {

    public void toast(String message){
    Toast.makeText(super.getApplicationContext(),message,Toast.LENGTH_LONG).show();
    }

}

Вам необходимо добавить свой расширяющийКласс к вашему манифесту для его работы.

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".ApplicationExtender">

Я не могу гарантировать, что это будет работать, я не пробовал.

...