【问题标题】:Android Toast Messages not workingAndroid Toast 消息不起作用
【发布时间】:2014-01-07 19:53:51
【问题描述】:

我正在通过 Andengine 为 Android 开发一款游戏。我有 MainActivity 类和 GameScene 类。我在 GameActivity 中使用 Toast 消息。它正在工作。

Toast.makeText(this, " Hello World", Toast.LENGTH_SHORT).show();

所以我想在 GameScene 类中使用 Toast 消息。但它不起作用。这是代码:

Toast.makeText(activity, " Hello World", Toast.LENGTH_SHORT).show();

我必须使用“活动”而不是“这个”。但它不起作用

为什么?

编辑:

当我使用第二个时,会发生错误。 日志猫: http://s29.postimg.org/k8faj9mdj/Capture.png

【问题讨论】:

  • 您是否尝试过使用 activity.getApplicationContext()
  • 你的活动是什么?
  • 使用 YourActivity.this

标签: java android andengine android-toast


【解决方案1】:

您正试图在后台线程中显示Toast。您应该在主 UI 线程上执行所有 UI 操作。

RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 异常对于初学者来说可能有点神秘,但本质上它告诉你你在一个错误的线程中。

为了解决这个问题,将吐司包裹到例如runOnUiThread():

activity.runOnUiThread(new Runnable() {
  @Override
  public void run() {
    Toast.makeText(...).show();
  }
});

【讨论】:

  • 我应该放活动吗?还是我应该写 this.runOnUiThread()? @laalto
【解决方案2】:

您的代码无法运行可能有两个原因。这是你的活动参数为空或......

在你展示 toast 后不久,活动就死了,在这种情况下,它也会杀死 toast,为避免这种情况,你可以像@Mehmet Seçkin 回答中一样调用activity.getApplicationContext()

【讨论】:

    【解决方案3】:

    使用以下之一

    Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
    
            Toast.makeText(getBaseContext(),"please Create your Account First", Toast.LENGTH_SHORT).show();
    
    
          Toast.makeText(GameActivity.this,"please Create your Account First", Toast.LENGTH_SHORT).show();
    

    【讨论】:

      【解决方案4】:

      用途:

      Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
      

      Toast.makeText(activity.this, " Hello World", Toast.LENGTH_SHORT).show();
      

      【讨论】:

        【解决方案5】:
        Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
        

        试试这个。

        【讨论】:

          【解决方案6】:

          既然你问为什么;我认为您将活动引用作为 Toast 消息的上下文,这就是它不起作用的原因。

          如果您尝试显示来自活动外部的 Toast 消息,您可以尝试:

          Toast.makeText(activity.getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
          

          或来自GameActivity

          Toast.makeText(GameActivity.this, " Hello World", Toast.LENGTH_SHORT).show();
          

          或来自MainActivity

          Toast.makeText(MainActivity.this, " Hello World", Toast.LENGTH_SHORT).show();
          

          【讨论】:

            【解决方案7】:

            因为你是从课堂上调用它的。您需要通过类构造函数从活动中获取上下文,否则您需要使用 GetApplicationcontext()。

            【讨论】:

              【解决方案8】:

              确保您正在测试的应用已开启通知。这就是我的故事以及为什么祝酒也不起作用。我一直在寻找一个直接的答案,而只是碰巧祝酒被认为是通知的一部分。有趣的东西,我不知道。

              【讨论】:

                【解决方案9】:

                如果您认为您的代码是正确的,请尝试关闭您的模拟器选项卡,然后打开 AVD 管理器,然后擦除数据,然后重新启动。或者您可以删除当前的 AVD 并添加一个新的。

                【讨论】:

                  猜你喜欢
                  • 2020-09-03
                  • 2014-07-04
                  • 2011-07-15
                  • 2011-12-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多