【问题标题】:Why doesn't the 'toast' message work, in Android? Cannot fix bug, please help!为什么在 Android 中“toast”消息不起作用?无法修复错误,请帮助!
【发布时间】:2010-10-26 14:19:09
【问题描述】:

假设我有以下代码作为 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,但我不知道为什么,因为我已经在 Android API 告诉我的那个类中扩展了服务。你能帮我弄清楚为什么会发生这种情况以及如何解决它吗?顺便说一句,我也使用了getApplicationContext(),而不是this,但它仍然崩溃=(。

谢谢。

【问题讨论】:

    标签: java android class crash toast


    【解决方案1】:

    我还没有尝试过,但是让你的服务告诉一个活动来祝酒怎么样,因为服务是一个后台活动,它的上下文似乎不能用来祝酒。

    您可以尝试的其他方法是扩展 Application 类,并在那里有一个 toast 生成器,然后从您的服务调用中。

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

    您的应用程序扩展器:

    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">
    

    我不能保证这会起作用,我还没有尝试过。

    【讨论】:

    • 对不起,上面的Application类是什么意思?你是说背景类
    • 不,抱歉,我试过了,但它仍然崩溃。还有其他建议吗?
    • 我需要查看您的 logCat 才能给您更多反馈。
    • 抱歉这么晚才回复。毕竟我决定不使用 toast 消息。它变得乏味,我认为 toast 是为了在 UI 中使用。所以,我选择了状态栏通知,它可以在后台服务中完美运行。谢谢你的帮助。我真的很感激!
    猜你喜欢
    • 2014-01-07
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2010-10-17
    • 2015-02-10
    • 2013-07-11
    • 2020-09-03
    相关资源
    最近更新 更多