我有嵌套的嵌套类,我试图在退出应用程序之前为最外层的类显示吐司。如果我注释掉exit语句,toast工作正常,所以我知道我正在正确访问上下文。我也试过把吐司放在一个线程中,它睡眠时间为2000毫秒(反之亦然,对于退出语句),但这仍然不起作用。
我想做的只是显示祝酒并退出程序。 (如果可能的话,同时做它会很好......)
public class A extends Service {
private Context context;
//...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context = this;
//...
return START_STICKY;
}
Handler disToast= new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
Toast.makeText(context, "see ya", Toast.LENGTH_SHORT).show();
return true;//also tried false, but that did not work...
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="my message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();//end of inner most class
};//end of first inner class
}//outermost class
编辑**为什么所有下来的选票?我没有使用任何活动(最外层的类是Service
,而且两个内部是普通的Java类)所以一些答案(虽然我非常适合的答案)不起作用。
答案 0 :(得分:1)
感谢所有试图为我解答此问题的人,但遗憾的是解决方案无效。
当我尝试在Toast
内使用Service
时,我必须this。
再一次,对那些试图回答它的人:谢谢。
对于那些在未说明理由的情况下投票的人,下次离开建设性的批评,而不是让我陷入黑暗。我在这里学习,如果你只是通过提供合理的理由进行投票,我就无法学习。我不是读者。
答案 1 :(得分:0)
USE getApplicationConext()INSTEAD OF CONTEXT
Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();
答案 2 :(得分:0)
Handler disToast= new Handler(new Callback() {
@Override
public void handleMessage(Message msg) {
String mString=(String)msg.obj;
Toast.makeText(this, mString, Toast.LENGTH_SHORT).show();
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="your message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();
};
更多详情请参阅Here
答案 3 :(得分:-1)
请使用
Toast.LENGTH_LONG
而不是
Toast.LENGTH_SHORT
Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();
现在你的toast将在System.exit();
之后显示