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");

我不知道如何解决它。

Android上从StreamingAssets读取XML文件的问题

StreamingAssets,不是StreammingAssets。像这样的特殊文件夹是区分大小写的,必须正确拼写才能按预期工作。只要纠正拼写就行了。如果可能的话,直接从这里复制名称(StreamingAssets)并粘贴到编辑器中。也许你的问题打错了?

主要问题在这里:

TextReader textReader = new StreamReader (Application.streamingAssetsPath + "/" + "Items.xml");

不能StreamReaderStreamingAssets文件夹读取。你必须在Android中使用WWW来做到这一点。我不确定这是否也适用于iOS。

1

。使用WWW类从StreamingAssets文件夹中读取xml文件。

2

。从字符串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