Android Resources.getIdentifier()在名称为数字时具有意外行为
我使用Resources.getIdentifier动态加载字符串资源;因为动态地向我传递了一个字符串,该字符串需要从我的资源文件中进行转换。当资源不存在时返回0;所以我来处理。但是,当我传入一个数字字符串时;尽管我的参考资料中没有定义,但它返回的是我传入的数字,而不是0。当我试图获取该资源时,这会导致崩溃Android Resources.getIdentifier()在名称为数字时具有意外行为,android,string,parsing,resources,localization,Android,String,Parsing,Resources,Localization,我使用Resources.getIdentifier动态加载字符串资源;因为动态地向我传递了一个字符串,该字符串需要从我的资源文件中进行转换。当资源不存在时返回0;所以我来处理。但是,当我传入一个数字字符串时;尽管我的参考资料中没有定义,但它返回的是我传入的数字,而不是0。当我试图获取该资源时,这会导致崩溃 int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.e
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
text2.setVisibility(View.VISIBLE);
text2.setText(context.getResources().getString(identifier));
} else {
text2.setVisibility(View.GONE);
}
这是定义的行为吗??我无法想象为什么当myText为“BLAH”时它工作得很好,但当myText为“12”时就不同了。我唯一能想到的就是先测试我的文本是否是数字;尽管我能找到的唯一方法是尝试将其解析为整数并捕获numberFormatException。这是最好的解决方案吗?字符串资源只能包含字符串,不能包含特殊字符,不能使用字母作为标记名 示例
boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))
if(isValid){
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
text2.setVisibility(View.VISIBLE);
text2.setText(context.getResources().getString(identifier));
} else {
text2.setVisibility(View.GONE);
}
}
suuuu
有效
suuuu
无效
因此首先检查您的文本是否有效
使用以下代码让它为您工作
代码
boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))
if(isValid){
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
text2.setVisibility(View.VISIBLE);
text2.setText(context.getResources().getString(identifier));
} else {
text2.setVisibility(View.GONE);
}
}
谢谢
Deepak字符串资源只能包含字符串,不能包含特殊字符,不能使用字母作为标记名 示例
boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))
if(isValid){
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
text2.setVisibility(View.VISIBLE);
text2.setText(context.getResources().getString(identifier));
} else {
text2.setVisibility(View.GONE);
}
}
suuuu
有效
suuuu
无效
因此首先检查您的文本是否有效
使用以下代码让它为您工作
代码
boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))
if(isValid){
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
text2.setVisibility(View.VISIBLE);
text2.setText(context.getResources().getString(identifier));
} else {
text2.setVisibility(View.GONE);
}
}
谢谢
Deepak这有点奇怪,但是如果我像getIdentifier()文档中提到的那样指定完全限定名,它会正常工作,否则我会得到与您相同的结果
使用
getIdentifier(“com.farragut.android.emsspeak:string/”+myText,null,null)进行尝试代码>这有点奇怪,但是如果我像getIdentifier()文档中提到的那样指定完全限定名,它会正常工作,否则我会得到与您相同的结果
使用getIdentifier(“com.farragut.android.emsspeak:string/”+myText,null,null)进行尝试代码>为了让这项工作顺利进行,我一直在努力工作:
int imgId = getResources().getIdentifier("moviedetails" + movieId , "drawable", getPackageName());
imageview.setImageResource(imgId);
对我来说非常好。只需要:“项目-->清洁”我当时正使劲敲脑袋,想让这一切顺利进行:
int imgId = getResources().getIdentifier("moviedetails" + movieId , "drawable", getPackageName());
imageview.setImageResource(imgId);
对我来说非常好。只需要:“项目-->清理”看起来像getIdentifier
方法中的bug。你需要发布错误报告。指令看起来像getIdentifier
方法中的bug。你需要发布错误报告。那真的很奇怪。。。就像你说的那样,但是根据文档,这两行代码应该是相同的。。。无论是限定名称,还是将类型和包作为单独的参数传入。哦,好吧。。。谢谢那真的很奇怪。。。就像你说的那样,但是根据文档,这两行代码应该是相同的。。。无论是限定名称,还是将类型和包作为单独的参数传入。哦,好吧。。。谢谢