【问题标题】:Why Toast not getting called为什么 Toast 没有被调用
【发布时间】:2019-10-07 15:14:51
【问题描述】:

我在 If 和 Else 语句中都有 Toast,If 语句中的所有代码都执行了,但 Toast 除外。其他语句没有问题。

问题主要是If语句中的Toast。

我已尝试将 Toast 从 If 语句中取出,一切正常,尝试将 finish() 从 If 语句中取出,但仍然不会调用 Toast。

if (filterCharSet1 in scannedID || filterCharSet2 in scannedID || filterCharSet3 in scannedID || filterCharSet4 in scannedID || filterCharSet5 in scannedID ) {
                    Log.d("checkcheck","contain")
                    finish()
                    Toast.makeText(this@ScannerActivity , "Error", Toast.LENGTH_SHORT).show()
}else{

                    Log.d("checkcheck","noContain")
                    finish()
                    Toast.makeText(this@ScannerActivity , "Ok", Toast.LENGTH_SHORT).show()
}

Else 语句中的 Toast 没有问题,但由于某种原因,If 语句中的 Toast 没有被调用。

【问题讨论】:

  • Toast之后调用finish()
  • 试过了,不行
  • 我不知道为什么会有upvotes?
  • @user1241241 你能指出问题吗?
  • @PratikButaniAndroidDev,我们将不胜感激您的帮助

标签: android kotlin android-toast


【解决方案1】:

您可以尝试使用 applicationContext 而不是活动。 Activity,作为上下文可能在调用 finish() 后不再可用

【讨论】:

  • 试过了,同样的问题
  • else 语句就像一个魅力,我上面的代码没有问题
  • 您确定调用了实际的if 语句吗?
  • 是的,因为我在 If 语句中的 Log 被调用了
  • 如果我拿走 Toast,finish() 也会被调用
【解决方案2】:

如果您调用 finish() 会破坏活动,这会使 this@ScannerActivity 无效。

【讨论】:

  • D/checkcheck: https://www.qrcode-monkey.com V/FA: Inactivity, disconnecting from the service A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x10 in tid 12290 (Thread-10007) Disconnected from the target VM, address: 'localhost:8603', transport: 'socket'
【解决方案3】:

您的 toast 没有显示,因为 finish 关键字破坏了活动。敬酒后只需拨打finish;您的代码应如下所示:

if (filterCharSet1 in scannedID || filterCharSet2 in scannedID || filterCharSet3 in scannedID || filterCharSet4 in scannedID || filterCharSet5 in scannedID ) {
                Log.d("checkcheck","contain")
                Toast.makeText(this@ScannerActivity , "Error", Toast.LENGTH_SHORT).show()
                finish()
}else{

                Log.d("checkcheck","noContain")
                Toast.makeText(this@ScannerActivity , "Ok", Toast.LENGTH_SHORT).show()
                finish()
}

我希望这会有所帮助.. 编码愉快!

【讨论】:

  • 同样的结果,else语句会起作用,但是当if语句被调用时,它什么也不做
  • 即使我从 if 语句中去掉了 finish(),Toast 也不会被调用
  • 这很奇怪.. 如果else 工作,if 也应该工作(只要条件确实满足)。
  • 我知道条件已经满足,因为我的 Log in if 语句被调用
  • finish() 和 Log.d 没有 Toast 就可以正常工作,但是如果 Toast 在那里,它什么也不做
【解决方案4】:

toast 后首先调用 finish() 然后尝试 runonuithread

this@ScannerActivity.runOnUiThread(java.lang.Runnable {
          Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show()
        })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多