Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Resources.getIdentifier()在名称为数字时具有意外行为_Android_String_Parsing_Resources_Localization - Fatal编程技术网

Android Resources.getIdentifier()在名称为数字时具有意外行为

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

我使用Resources.getIdentifier动态加载字符串资源;因为动态地向我传递了一个字符串,该字符串需要从我的资源文件中进行转换。当资源不存在时返回0;所以我来处理。但是,当我传入一个数字字符串时;尽管我的参考资料中没有定义,但它返回的是我传入的数字,而不是0。当我试图获取该资源时,这会导致崩溃

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。你需要发布错误报告。那真的很奇怪。。。就像你说的那样,但是根据文档,这两行代码应该是相同的。。。无论是限定名称,还是将类型和包作为单独的参数传入。哦,好吧。。。谢谢那真的很奇怪。。。就像你说的那样,但是根据文档,这两行代码应该是相同的。。。无论是限定名称,还是将类型和包作为单独的参数传入。哦,好吧。。。谢谢