问题背景
在 Android 开发中,通过 ApplicationInfo 读取清单文件中的 <meta-data> 配置时,偶尔会遇到 getString 方法返回 null 的情况。典型的代码逻辑如下:
<meta-data android:name="hhhhhh" android:value="99999">
</meta-data>
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(
context.getPackageName(), PackageManager.GET_META_DATA);
Object keyValueObj = appInfo.metaData.getString(keyName);
if (keyValueObj != null) {
keyValue = keyValueObj.toString();
}
这段代码始终获取不到值,核心原因在于类型不匹配。
原因剖析
当你在 AndroidManifest.xml 中定义 android:value="99999" 时,系统解析器可能会将其识别为整数(Integer)而非字符串(String)。
Bundle.getString(String key) 方法内部会检查该键对应的值是否为 String 类型。如果实际存储的是数字类型,该方法就会直接返回 null,而不是抛出异常或自动转换。这在处理纯数字配置项时特别容易踩坑,很多开发者误以为 value 属性默认都是字符串。
修复方案
要解决这个问题,不要依赖强类型的 getString,而是使用通用的 get 方法获取原始对象,再进行类型判断和转换。
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(
context.getPackageName(), PackageManager.GET_META_DATA);
// 使用 get 获取原始对象
Object obj = appInfo.metaData.get(keyName);
if (obj != null) {
// 根据实际存储类型进行转换
if (obj instanceof String) {
keyValue = (String) obj;
} (obj Integer) {
keyValue = String.valueOf(obj);
}
}

