在我的一个函数中,如果出现错误,我会生成一条 Toast 消息。该消息调用资源 ID 并从最后一个错误中获取消息。如果最后一个错误返回 null,则显示实际的 int ID,而不是取消引用的字符串。
Toast.makeText(SelectionActivity.this,
(R.string.error_onCanceled + " " mLastError.getMessage()),
Toast.LENGTH_SHORT).show();
2131689536 null
Toast.makeText(SelectionActivity.this,
(R.string.error_onCanceled),
Toast.LENGTH_SHORT).show();
On Canceled: error =
** this is my string from the resource file
我不明白为什么将 null 附加到字符串末尾会使其返回 int ID 而不是字符串。
最佳答案
R.string.error_onCanceled
是一个 int
。
makeText() 有两种形式。其中一个采用 int
,将其视为字符串资源 ID。另一个采用 CharSequence
或 String
。
Toast.makeText(SelectionActivity.this,
(R.string.error_onCanceled),
Toast.LENGTH_SHORT).show();
这使用采用 int
并使用您的字符串资源的那个。
对于另一个,您有R.string.error_onCanceled + ""mLastError.getMessage()
。这不能编译。我假设您真正的意思是 R.string.error_onCanceled + ""+ mLastError.getMessage()
。在这种情况下,Java 能做的就是:
将
int
转换为String
将其与其他字符串连接
但是 Java 会将 int
直接转换为 String
,因为 Java 不知道 Android 字符串资源。
解决此问题的最直接方法是使用 getString(R.string.error_onCanceled_) + ""+ mLastError.getMessage()
,因此您要求 Android 为您提供与字符串资源 ID。
或者,您可以更改字符串资源以使其包含 %d:
<string name="error_onCanceled">** this is my string from the resource file %s</string>
然后,您可以使用 getString(R.string.error_onCanceled, mLastError.getMessage())
获取组合消息并传递给 Toast
。
无论如何,如果您不将纯字符串资源 ID 传递给 makeText()
,则需要使用 getString()
。
关于java - 在末尾附加空消息时显示资源 ID,而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548016/