【问题标题】:Android Toast Message is not showingAndroid Toast 消息未显示
【发布时间】:2011-12-09 20:03:33
【问题描述】:

我有按钮。当用户点击按钮时,有一些条件,条件不满足则需要显示 Toast 但不显示 Toast 消息...

代码:已编辑

 Button addMe = (Button)findViewById(R.id.addMe);
    addMe.setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
               if(selectedReason.equals("--Select--")){
                   Log.i("TAG","-----");
                   Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
               }else if(selectedType.equals("--Select--")){
                   Toast.makeText(getParent(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
               }else{
                   if(selectedType.equals("Value")){
                       if(spc_amount.getText().toString().equals("")){
                           Log.i("TAG","-----");
                           Toast.makeText(getBaseContext(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
                       }else{
                           if(Double.parseDouble(spc_amount.getText().toString()) > invoiceValue){
                               Toast.makeText(getBaseContext(), "Amonut can not be grater than invoice", Toast.LENGTH_SHORT).show();
                           }else{
                               Discount dis = new Discount();
                               dis.setCriteriaName(selectedReason);
                               dis.setDiscountValue(Double.parseDouble(spc_amount.getText().toString()));
                               spDisList.put(1,dis);
                               tl.removeAllViews();
                            loadTableLayout();
                           }

                       }
                   }
               }
           }
    });

我尝试过使用 getParent()getApplicationContext()SpecialDiscountActivity.thisgetBaseContext() 的上下文,但没有工作......

这条Toast消息来自Tab Activity Group

【问题讨论】:

  • 正如下面的一条评论所指出的,您还应该为应用程序启用“显示通知”,以便 Toast 为您工作。
  • 为什么要编辑代码以包含解决方案?应该保留它以包含错误,否则这个问题没有意义。
  • 还有一个常见的陷阱:如果你不在主线程中,你需要调用runOnUiThread。例如。 runOnUiThread(() -> Toast.makeText(getApplicationContext(), " ...", Toast.LENGTH_LONG).show());

标签: android


【解决方案1】:

试试:

Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();

正是你在各处省略的 .show() 导致你的所有 toast 实例化,但从不执行。

【讨论】:

  • 天哪,为什么。因此被困了几个小时!
  • 这个。是。傻。
  • 我感觉我会犯这个错误好几次。如果你使用 jQuery,它有点类似于他们对 .show().hide() DOM 元素的方法,所以如果你记得默认情况下总是隐藏 Toast,这可能有助于记住使用 .show()
  • 我有一个 .show() 并且我直接从活动的 onCreate 方法调用,我也使用了thisMainActivity.thisgetApplication()getApplicationContext()getBaseContext() all无济于事。吐司在前两次测试中出现,然后再也没有出现。在此期间没有代码更改。
  • @RichardMcFriendOluwamuyiwa 然而,我从第一手经验中知道,总有一些你错过的小细节..
【解决方案2】:

如果这不能解决您的问题,请原谅,但我不小心取消了一次应用程序的“显示通知”设置。进入您的设备设置/应用程序/管理器并检查此设置可能是一个想法。

【讨论】:

  • 我从来没有想过...以为这个设置只隐藏了我的服务的通知图标,但你是对的,它确实也隐藏了 toasts
  • 哇,我对此非常怀疑,但至少在 4.4.4 上,禁用通知也会停止显示 toast。
  • 我也这样做了,浪费了我 30 分钟的时间 :(
【解决方案3】:

我认为你错过了.show(); 应该是……

Toast.makeText(getBaseContext(), "Amount can not be grater than invoice",
                                                     Toast.LENGTH_SHORT).show();

【讨论】:

  • 感谢@LalitPoptani 我使用了 Toast.makeText(SalesActivityGroup.group.getParent(), "Amonut can not be grater than invoice", Toast.LENGTH_SHORT).show();
  • @NagkeeranPiraba 关于您的问题的另一件事是您应该提到您正在使用 Tab。
  • 我不敢相信这也是我的错误!哈哈。非常感谢您的提醒!
【解决方案4】:

只需重新启动您的设备!它解决了我的问题。

【讨论】:

  • 天啊,是的,对于阅读此答案的任何人,他的意思是“重新启动您的设备”。我几乎不赞成你的回答...... xP
  • 老兄,你救了我一整天!我正在展示像Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 这样的祝酒词,但它并没有突然出现。让我质疑我的能力和生命的意义......设备重启修复了它!
  • 哇。适用于 2020 年。Pixel 2 设备版本 QQ1A.191205.008)。太棒了!
  • 这适用于我的模拟 AVD Pixel 3a。我已经尝试了其他一切。谢谢!
  • 在 MiA2 上为我工作。干得好,我找到了这个。我正要开始修改一直在工作的代码!
【解决方案5】:

【讨论】:

  • 不调用 UI 线程让我犯错的次数比我愿意承认的要多。
【解决方案6】:

我喜欢这个

Toast.makeText(SalesActivityGroup.group.getParent(), "Amount can not be 
                                grater than invoice", Toast.LENGTH_SHORT).show();

【讨论】:

    【解决方案7】:

    刚刚碰到这个问题,想知道一个简单的 Toast 怎么没有出现。经过几次试验,我突然想到检查应用程序的通知设置,瞧。

    我打开通知设置并开始显示。我搜索并发现了以下链接,其中谈到了相同的内容:

    https://code.google.com/p/android/issues/detail?id=35013

    【讨论】:

    • 我在 Android 9 上也遇到过这种情况,这个解决了。谢谢!
    【解决方案8】:

    如果 Toast 没有显示,则意味着您没有调用 show() 方法或者您不在 UI 线程

    理想情况下,您应该创建一个辅助方法来在 UI 线程上显示这样的 Toast

     /** Execute Toast on UI thread **/
     private fun showToast(message: String) {
    
            Handler(Looper.getMainLooper()).post {
                // Code here will run in UI thread
                Toast.makeText(
                    this, 
                    message,
                    Toast.LENGTH_LONG
                ).show()
            }
        }
    

    【讨论】:

    • 从主线程调用空的 Handler 构造函数将创建一个不会发布到主线程的 Handler。您需要指定主 Looper。
    【解决方案9】:

    可能有两种可能性:

    1 - 您没有在Toast.makeText(getActivity(), "Hi", Toast.LENGTH_SHORT) 的最后附加.show();

    2 - 可能存在您没有传递正确上下文

    的情况

    为此尝试传递getActivity().getApplicationContext();

    在我的情况下解决了这个问题。

    祝你好运:)

    【讨论】:

      【解决方案10】:

      有时模拟器会挂起,因此重新启动模拟器可以解决问题。

      【讨论】:

        【解决方案11】:

        只需重启你的模拟器并不能解决我的问题。

        1. 关闭模拟器
        2. 工具 -> Avd 管理器
        3. 在设备列表中点击“操作”列下的“下拉图标”。
        4. 现在冷启动

        现在重新安装应用就可以了。

        【讨论】:

          【解决方案12】:

          你可以使用Activity的上下文

          喜欢,

          Toast.makeText(ActivityName.this,"Reason can not be blank", Toast.LENGTH_SHORT).show()
          

          如果这不起作用,请在您的每个条件中添加一个log.i();,否则可能会到最后一个,而您没有得到 Toast。

          【讨论】:

            【解决方案13】:

            在我的情况下,这是因为我没有从主线程运行,这修复了它:

                val mainActivity = (tabHostActivity.activityContext() as MainActivity)
                mainActivity.lifecycleScope.launch{ //Dispatchers.Main, follows lifecycle 
                    Toast.makeText(mainActivity, "my awesome message", Toast.LENGTH_LONG).show()
                }
            

            【讨论】:

              【解决方案14】:

              有时我们想用 Toast 消息打印的消息中可能存在错误或 nullPointerException。如果发生此错误,则应用程序将简单地忽略 Toast 消息。我遇到过同样的问题。我在 Log 中打印了消息并发现了错误,然后我在 Toast 中更改了消息。它按我的意愿工作。试试看!!

              【讨论】:

                【解决方案15】:

                试试:

                Toast.makeText(v.getContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
                

                【讨论】:

                  【解决方案16】:

                  Complimer 检查所有代码,如果出现严重错误,它甚至会忽略错误部分之前的行,因此您将看不到“Toast”。 简单地,注释其中发生错误的行(您可以在 Logcat 中找到错误行) 现在您可以看到“Toast”并分析您的问题。

                  【讨论】:

                    猜你喜欢
                    • 2015-02-12
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-07-04
                    • 2020-07-30
                    • 2019-01-31
                    • 1970-01-01
                    相关资源
                    最近更新 更多