在末尾附加空消息时显示资源 ID 而不是字符串
Resource ID showing instead of string when appending null message at the end
在我的一个函数中,如果出现错误,我会生成一条 Toast 消息。该消息调用资源 ID 并从上一个错误中获取消息。如果最后一个错误 return 为 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 附加到字符串的末尾会使它 return 成为 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()
。
当您以这种方式与字符串连接时调用 string_element:
Toast.makeText(SelectionActivity.this,
(getString(R.string.error_onCanceled) + " " mLastError.getMessage()),
Toast.LENGTH_SHORT).show();
@CommonsWare 完全正确
Toast.makeText是重载方法
您可以从字符串创建 toast:
/**
* Make a standard toast that just contains a text view.
*
* @param context The context to use. Usually your {@link android.app.Application}
* or {@link android.app.Activity} object.
* @param text The text to show. Can be formatted text.
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or
* {@link #LENGTH_LONG}
*
*/
public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
return makeText(context, null, text, duration);
}
或资源 ID:
/**
* Make a standard toast that just contains a text view with the text from a resource.
*
* @param context The context to use. Usually your {@link android.app.Application}
* or {@link android.app.Activity} object.
* @param resId The resource id of the string resource to use. Can be formatted text.
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or
* {@link #LENGTH_LONG}
*
* @throws Resources.NotFoundException if the resource can't be found.
*/
public static Toast makeText(Context context, @StringRes int resId, @Duration int duration)
throws Resources.NotFoundException {
return makeText(context, context.getResources().getText(resId), duration);
}
你不小心把它们混在一起了
在我的一个函数中,如果出现错误,我会生成一条 Toast 消息。该消息调用资源 ID 并从上一个错误中获取消息。如果最后一个错误 return 为 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 附加到字符串的末尾会使它 return 成为 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()
。
当您以这种方式与字符串连接时调用 string_element:
Toast.makeText(SelectionActivity.this,
(getString(R.string.error_onCanceled) + " " mLastError.getMessage()),
Toast.LENGTH_SHORT).show();
@CommonsWare 完全正确
Toast.makeText是重载方法
您可以从字符串创建 toast:
/**
* Make a standard toast that just contains a text view.
*
* @param context The context to use. Usually your {@link android.app.Application}
* or {@link android.app.Activity} object.
* @param text The text to show. Can be formatted text.
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or
* {@link #LENGTH_LONG}
*
*/
public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
return makeText(context, null, text, duration);
}
或资源 ID:
/**
* Make a standard toast that just contains a text view with the text from a resource.
*
* @param context The context to use. Usually your {@link android.app.Application}
* or {@link android.app.Activity} object.
* @param resId The resource id of the string resource to use. Can be formatted text.
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or
* {@link #LENGTH_LONG}
*
* @throws Resources.NotFoundException if the resource can't be found.
*/
public static Toast makeText(Context context, @StringRes int resId, @Duration int duration)
throws Resources.NotFoundException {
return makeText(context, context.getResources().getText(resId), duration);
}
你不小心把它们混在一起了