Android上从StreamingAssets读取XML文件的问题
本文关键字:文件 问题 XML 读取 上从 StreamingAssets Android | 更新日期: 2023-09-27 18:09:55
我遇到了一个问题,我无法从streamingassets文件夹中的XML文件读取数据。在编辑器上一切正常,但在Android上不行。
public void Start () {
Type[] itemTypes = { typeof(Equipment), typeof(Weapon), typeof(Consumeble), typeof(Jevelary) };
XmlSerializer serializer = new XmlSerializer(typeof (ItemContainer), itemTypes);
TextReader textReader = new StreamReader (Application.streamingAssetsPath + "/" + "Items.xml");
itemContainer = (ItemContainer)serializer.Deserialize (textReader);
textReader.Close ();
}
我确信问题出在这一行:
TextReader textReader = new StreamReader (Application.streamingAssetsPath + "/" + "Items.xml");
我不知道如何解决它。
是StreamingAssets
,不是StreammingAssets
。像这样的特殊文件夹是区分大小写的,必须正确拼写才能按预期工作。只要纠正拼写就行了。如果可能的话,直接从这里复制名称(StreamingAssets
)并粘贴到编辑器中。也许你的问题打错了?
主要问题在这里:
TextReader textReader = new StreamReader (Application.streamingAssetsPath + "/" + "Items.xml");
你不能从StreamReader
的StreamingAssets
文件夹读取。你必须在Android中使用WWW
来做到这一点。我不确定这是否也适用于iOS。
。使用WWW
类从StreamingAssets
文件夹中读取xml文件。
。从字符串WWW
read中创建新的StringReader
实例
3 。从StringReader
实例创建新的TextReader
。
void Start()
{
StartCoroutine(readXML());
}
IEnumerator readXML()
{
Type[] itemTypes = { typeof(Equipment), typeof(Weapon), typeof(Consumeble), typeof(Jevelary) };
XmlSerializer serializer = new XmlSerializer(typeof(ItemContainer), itemTypes);
WWW www = new WWW(Application.streamingAssetsPath + "/" + "Items.xml");
yield return www;
if (string.IsNullOrEmpty(www.error))
{
string result = www.text;
TextReader textReader = new StringReader(result);
itemContainer = (ItemContainer)serializer.Deserialize(textReader);
textReader.Close();
}
}
你可能需要使用file:///作为android的路径前缀。
尝试调试传递给StreamReader的路径,然后尝试使用该路径从浏览器打开该文件。
你可以像程序员说的那样,使用www类。
#if UNITY_ANDROID
WWW www = new WWW( "file:///" + Application.streamingAssetsPath + "/Items.xml");
#elif UNITY_EDITOR
//your previous code which worked in the editor
#endif