我在manifest.xml中指定了一个元数据,如下所示:
<meta-data android:value="5555555555" android:name="foo"></meta-data>
访问这样的元数据时:
ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);
此值被解释为int - 更重要的是 - 错误地解释为(1260588259)。
由于类型是由构建系统自动确定的(布尔值,整数,浮点数和字符串),我想知道是否有办法强制数据类型为字符串。
我尝试在末尾添加一个空格(“5555555555”),但随后该值被解释为5.5555553E9 float! )。
我也尝试使用getString而不是get,但是返回null。
有什么想法吗? TIA。
答案 0 :(得分:35)
在数字前放置一个转义空格似乎有效:
<meta-data android:name="foo" android:value="\ 1234567890"/>
转义空格不会出现在get()
返回的值中。
如果我诚实的话,我不知道这是如何运作的。
如果你想要something documented因此更可靠,你总是可以把你的字符串值作为资源并引用它:
<meta-data android:name="foo" android:resource="@string/mynumber"/>
答案 1 :(得分:9)
我也有这样的问题。 我的解决方案如下:
<meta-data android:value="5555555555\0" android:name="foo"></meta-data>
我在变量的末尾添加了 - eskape序列&#34; \ 0&#34; (NULL - 通常用于定义字符串的结尾(例如,在语言C中)。
这项工作适合我。
最好的问候。
答案 2 :(得分:0)
不要使用空格,而是尝试使用一个标点符号,该标点符号应该在数字值中没有任何作用,比如冒号,看看是否有帮助。
答案 3 :(得分:0)
我最近遇到了这个问题,并且非常令人沮丧的是,像Facebook应用程序ID这样的东西被解释为一个整数,导致由于溢出导致的问题(当然)。我原以为/希望有可能覆盖隐式输入。例如,而不是:
<meta-data android:name="value" android:value="12345678901234567890" />
如果我们能写下来会很好:
<meta-data android:name="value" android:type="string" android:value="12345678901234567890" />
为了弥补这一点,我写了一些需要清单属性的支持代码,如下所示:
<meta-data android:name="value1" android:value="string/12345678901234567890" />
<meta-data android:name="value2" android:value="integer/12345" />
<meta-data android:name="value3" android:value="boolean/true" />
<meta-data android:name="value4" android:value="float/1.34" />
<meta-data android:name="value5" android:value="float/6" />
请注意,这看起来与Android @string
/ @integer
语法类似,只是我删除了@
,将其解释为删除了间接级别。
除了解决原始问题[0-9] +总是被解释为整数之外,它还允许直接指定浮点数,尽管看起来像一个整数。
这样做的另一个优点是可以任意扩展这组类型。 e.g。
<meta-data android:name="myfrac" android:value="fraction/3/7" />