主要Looper中没有显示Toast消息?

时间:2014-07-30 10:28:55

标签: android toast

我知道这是一个很老的问题,有许多答案,就像我发现here。但我仍然看不到我的祝酒词。

我尝试检查当前的线程:

Log.d("DEBUG", "Main Looper: " + Looper.getMainLooper().toString() + ", Current Looper: " + Looper.myLooper().toString());
Log.d("DEBUG", "Main Thread: " + Looper.getMainLooper().getThread().toString() + ", Current Thread: " + Thread.currentThread().toString());

//and the log is like:
D/DEBUG﹕ Main Looper: Looper{420a9e68}, Current Looper: Looper{420a9e68}
D/DEBUG﹕ Main Thread: Thread[main,5,main], Current Thread: Thread[main,5,main]

所以我觉得我在主线程(ui线程)中,我也特意尝试在ui线程中吐司:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getBaseContext(), "abc", Toast.LENGTH_LONG).show();
        Log.d("DEBUG", "ui thread abc");
    }
});

我可以看到日志“ui thread abc”,但吐司仍未出现。

然后我想也许吐司与其他观点重叠,所以我试图指定吐司的位置,如: Toast toast Toast.makeText(getBaseContext(),“abc”,Toast.LENGTH_LONG);

Toast toast = Toast.makeText(this, "abc", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP|Gravity.CENTER, 0, 0);
toast.show();

仍然一无所获。那么你觉得我的祝酒词怎么样?

------- UPDATE

我正处于一个垂直LinearLayout和几个嵌入式水平LinearLayouts的活动中。 我现在只参加了两项活动,而且我在主要的活动中敬酒。

我正在使用自定义图像滑块并在onclick事件中进行烘烤,onClickMethod如下所示:

public void onSliderClick(BaseSliderView slider) {
//        Log.d("DEBUG", "Main Looper: " + Looper.getMainLooper().toString() + ", Current Looper: " + Looper.myLooper().toString());
//        Log.d("DEBUG", "Main Thread: " + Looper.getMainLooper().getThread().toString() + ", Current Thread: " + Thread.currentThread().toString());
//        Toast.makeText(getBaseContext(), slider.getBundle().get("testMsg").toString(), Toast.LENGTH_LONG).show();

//        Toast.makeText(getApplicationContext(), slider.getBundle().get("testMsg").toString(), Toast.LENGTH_LONG).show();
//        Log.d("DEBUG", "Slider - " + slider.getBundle().get("testMsg").toString());

    Toast.makeText(getApplicationContext(), "abc", Toast.LENGTH_LONG).show();
    Log.d("DEBUG", "msg abc 123");


//        Toast toast = Toast.makeText(this, "abc", Toast.LENGTH_SHORT);
//        toast.setGravity(Gravity.TOP|Gravity.CENTER, 0, 0);
//        toast.show();
}

-------更新2

我刚刚发现动作栏吐司也没有显示,我确实设置了标题元素,我正在使用一个位于屏幕底部的分割操作栏。

实际上我之前可以看到所有的Toast消息,然后我对UI或其他一些东西进行了一些更改,然后所有的吐司都消失了。问题是我无法回滚到吐司工作正常的旧版本,我找不到它们现在消失的原因。

顺便提一下,添加自定义图像滑块后,toast仍然很好,除了自动切换图像滑块的后台线程外,没有任何其他线程。

3 个答案:

答案 0 :(得分:1)

我一个月前遇到同样的问题,当我试图从Async<>(非UI线程)的 doInBackground(String ... params)方法做吐司时,我用它和它工作

MainActivity.this.runOnUiThread(new Runnable() {
                  public void run() {
                      Toast.makeText(getApplicationContext(), "whatever message ",
                           Toast.LENGTH_LONG).show();

希望这能帮到你

答案 1 :(得分:0)

使用getApplicationContext()或活动上下文

 Toast.makeText(getApplicationContext(), "abc", Toast.LENGTH_LONG).show();

答案 2 :(得分:0)

今天我在开发其他应用时又遇到了问题,并再次进行了最后一次搜索。最后发现这似乎是一个Android bug ,如果你禁用了应用的通知,那么烤面包消息也被禁用

我所要做的就是去设置 - >应用 - > My_App检查“显示通知”,偶尔我自己也不会检查。