2016-10-01 59 views
0

我遇到了一個問題,我無法從StreammingAssets文件夾中的XML文件讀取數據。在編輯器上一切正常,但在Android上沒有。在Android上從StreamingAssets讀取XML文件的問題

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

我不知道如何解決它。 在此先感謝。

+0

Google for logcat。瞭解如何使用它。我喜歡它在android工作室,因爲彩色文本和過濾。然後重現你的問題,同時保持你的logcat。在這裏發佈你的例外,所以我們可以幫助你。 –

回答

0

它是StreamingAssets不是StreammingAssets。像these這樣的特殊文件夾區分大小寫,並且必須拼寫正確才能使其按預期工作。只需糾正拼寫。如果可能,直接從這裏複製名稱(StreamingAssets)並將其粘貼到編輯器中。也許這是你的問題中的一個錯字?

主要問題就在這裏:

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

不能StreamingAssets文件夾StreamReader閱讀。您必須使用WWW才能在Android中執行此操作。不知道這是否也適用於iOS。

。使用WWW類從StreamingAssets文件夾中讀取xml文件。

。創建新的StringReader實例從字符串WWW中讀取。

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

您可能需要爲android的路徑使用file:///前綴。

嘗試調試您傳遞給StreamReader的路徑,然後嘗試使用該路徑從瀏覽器中打開該文件。

你可以像Programmer說的那樣使用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