是否可从Firestore获取数据写入Android应用的XML资源文件?

问题解答
APK 编译打包后,res 目录下的所有资源文件都是只读属性,应用运行过程中无法动态修改、写入内容到内置的XML资源文件中,你想要直接把Firestore拉取的内容写入到资源XML的需求无法直接实现,可以用以下替代方案满足业务需求:
方案1:封装工具方法模拟资源调用,直接使用拉取的数组
你可以在应用初始化、或者需要用到角色数组的节点,先从Firestore拉取eventRole对应的字符串数组,存储到本地缓存(内存、SharedPreferences、Room数据库均可),再封装一个和系统getResources().getStringArray()用法一致的工具方法调用即可,示例逻辑如下:
// 工具类示例,Java实现逻辑一致 fun getCustomStringArray(context: Context, arrayName: String): Array<String>? { if ("Roles" == arrayName) { // 优先读取你从Firestore拉取后存在本地的eventRole数组 val localRoles = CacheUtils.getEventRoleArray() if (localRoles != null) { return localRoles } } // 兜底读取本地XML默认配置的数组 return try { val resId = context.resources.getIdentifier(arrayName, "array", context.packageName) context.resources.getStringArray(resId) } catch (e: Exception) { null } }
方案2:持久化存储拉取的数组到应用私有目录
如果需要长期存储从Firestore拿到的数组数据,可以直接将数组序列化为JSON字符串,存储到应用私有目录的普通文件、或者SharedPreferences中,私有目录的文件读写完全不受限制,不需要修改系统资源文件。
开发阶段预写入XML的方案
如果你是在开发阶段需要把Firestore的eventRole数据提前写入到项目的XML资源文件里,不需要运行时动态修改,可以写个本地脚本实现:
- 第一步:通过Firestore Admin SDK拉取
eventRole字段对应的字符串数组 - 第二步:遍历数组内容生成对应的
<item>数组元素值</item>节点,替换掉项目中arrays.xml对应位置的空节点即可
内容的提问来源于stack exchange,提问作者PI PI NAN
相关产品推荐
相关产品推荐

