1# 资源管理开发常见问题 2 3<!--Kit: Localization Kit--> 4<!--Subsystem: Global--> 5<!--Owner: @liule_123--> 6<!--Designer: @buda_wy--> 7<!--Tester: @lpw_work--> 8<!--Adviser: @Brilliantry_Rui--> 9 10## 如何读取rawfile中的xml文件并转化为String类型(API 9) 11 12**解决措施** 13 14通过resourceManager的getRawFileContent接口获取xml数据,再通过String.fromCharCode将获取的数据转化为String类型。 15 16**代码示例** 17 18``` 19resourceManager.getRawFileContent('test.xml', (error, value) => { 20 if (error != null) { 21 console.log("error is " + error); 22 } else { 23 let rawFile = value; 24 let xml = String.fromCharCode.apply(null, rawFile) 25 } 26}); 27``` 28 29**参考链接** 30 31[资源管理](../reference/apis-localization-kit/js-apis-resource-manager.md) 32 33 34## Stage模型下如何获取资源(API 9) 35 36**解决措施** 37 38Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包。此方式不适用于FA模型。 39 40**代码示例** 41 42``` 43const context = getContext(this) as any 44context 45 .resourceManager 46 .getString($r('app.string.entry_desc').id) 47 .then(value => { 48 this.message = value.toString() 49}) 50``` 51 52 53## 如何通过接口获取resource目录的路径(API 9) 54 55**问题现象** 56 57希望获取resource目录的路径,从而使用文件管理接口操作文件。 58 59**解决措施** 60 61由于应用以hap形式进行安装,安装完成后不会解压hap包,所以在程序运行时无法获取resource路径。 62 63可以考虑如下两种方式获取资源文件: 64 651. 使用$r或者$rawfile访问。适合静态访问,程序运行时不改变资源路径。 66 672. 使用ResourceManage访问。适合动态访问,程序运行时可动态改变资源路径。 68 69**参考链接** 70 71[资源分类与访问](../quick-start/resource-categories-and-access.md)、[资源管理](../reference/apis-localization-kit/js-apis-resource-manager.md) 72 73 74## 资源管理内的getPluralString方法获取value值有误(API 9) 75 76**问题现象** 77 78getPluralString接口获取value值有误,显示复数值(other)。 79 80**解决措施** 81 82getPluralString接口只支持英文系统,不支持中文。 83 84 85## 如何获取resources目录中自定义的string字段(API 9) 86 87**解决措施** 88 89使用ResourceManager模块的getStringValue方法获取。 90 91**参考链接** 92 93[资源管理](../reference/apis-localization-kit/js-apis-resource-manager.md#getstringvalue9) 94 95 96## AppScope中的资源如图片,文字等如何引用(API 9) 97 98**解决措施** 99 100通过$r('app.type.name')的形式来引用,type代表资源类型,如color,string,media等,name代表资源命名。 101 102 103## Resource类型如何转为String(API 9) 104 105**解决措施** 106 107Resource为string支持限定词目录使用this.context.resourceManager.getStringSync($r('app.string.test').id),可以同步转换,不支持$r('app.string.test', 2)方式。 108 109**参考链接** 110 111[ResourceManager\(资源管理\)](../reference/apis-localization-kit/js-apis-resource-manager.md#getstringsync9) 112 113 114## form_config.json文件中是否可以使用$引用常量(API 9) 115 116form_config.json文件中不支持使用$引用常量。 117 118 119## ArkTS如何解析xml文件(API 9) 120 121**解决措施** 122 1231. 在rawfile目录下创建如下xml文件**。** 124 125 ``` 126 <?xml version="1.0" encoding="utf-8"?> 127 <user> 128 <name>Jacky</name> 129 <age>18</age> 130 </user> 131 ``` 132 1332. 使用resourceManager.getRawFileContent获取xml文件字节数组。 134 135``` 136import resourceManager from '@ohos.resourceManager'; 137import xml from '@ohos.xml'; 138export default { 139 onCreate() { 140 resourceManager.getResourceManager((error, res) => { 141 if (error != null) { 142 console.log("error is " + error); 143 return 144 } 145 res.getRawFileContent("test.xml", (error, value) => { 146 if (error != null) { 147 console.log("error is " + error); 148 return 149 } 150 let arrayBuffer = value.buffer; // unit8Array 151 var xmpParser = new xml.XmlPullParser(arrayBuffer); 152 var tagName = "" 153 //do something 154 console.log("parse xml finished"); 155 }) 156 }) 157 } 158}; 159``` 160