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

时间:2016-10-01 19:33:39

标签: c# android xml unity3d xml-serialization

我遇到了一个问题,我无法从StreammingAssets文件夹中的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");

我不知道如何解决它。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

StreamingAssets不是StreammingAssets。像these这样的特殊文件夹区分大小写,必须拼写正确才能使它们按预期工作。只需更正拼写即可。如果可能,请直接从此处复制名称(StreamingAssets)并将其粘贴到编辑器中。也许这是你问题中的拼写错误?

主要问题在于:

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

无法使用StreamingAssetsStreamReader文件夹中读取。您必须使用WWW在Android中执行此操作。不确定这是否也适用于iOS。

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

2 。从字符串StringReader读取新的WWW实例。

3 。从TextReader个实例中创建新的StringReader

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();
    }
}

答案 1 :(得分:0)

您可能需要使用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