java - 在末尾附加空消息时显示资源 ID,而不是字符串

标签 java android string string-concatenation null-pointer

在我的一个函数中,如果出现错误,我会生成一条 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。另一个采用 CharSequenceString

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/

相关文章:

python:SyntaxError:EOL,同时扫描字符串文字

python - 根据起始字母从数据框中的列中提取值

python - 如何使用字典映射替换字符串中的单词

java - 在模拟器之间发送通知

java - Gradle:从其他项目获取属性

java - 自动建议 XML 解析源给出错误

android - 如何从另一个 Activity 中获取编辑文本值作为一个 Activity 中的字符串值?

c# - 通过 HSSF.EventUserModel 读取 protected 书籍和表格的 XLS

java - 通过 Rest Assured 获取 Rest API URI 的状态代码 415 但通过 Rest Client 工作正常

android - 如果应用程序在后台,则点击通知栏不会在 Activity 中收到消息