2016-10-01 11 views
0

У меня возникла проблема с тем, что я не могу прочитать данные из XML-файла, который находится в папке StreammingAssets. В редакторе все работает отлично, но на Android нет.Проблемы с чтением XML-файла из StreamingAssets на 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"); 

Я понятия не имею, как его решить. Спасибо заранее.

+0

Google для logcat. Узнайте, как его использовать. Мне нравится в андроид-студии из-за цветных текстов и фильтрации. Затем воспроизведите вашу проблему, сохраняя yey на вашем логарифме. Отправьте свое исключение, чтобы мы могли вам помочь. –

ответ

0

Это StreamingAssets не StreammingAssets. Специальные папки, такие как these, чувствительны к регистру и должны быть написаны правильно, чтобы они работали должным образом. Просто исправьте орфографию. Если возможно, скопируйте имя прямо отсюда (StreamingAssets) и вставьте его в Редактор. Может быть, это опечатка в вашем вопросе?

Основная проблема заключается здесь:

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

Вы не может читать из папки StreamingAssets с StreamReader. Вы должны использовать WWW, чтобы сделать это в Android. Не уверен, что это относится и к iOS.

. Прочтите файл xml из папки StreamingAssets с классом WWW.

.Создание нового StringReader экземпляр из строки WWW прочитал.

.Создание нового 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(); 
    } 
} 
0

Возможно, вам понадобится использовать файл: /// префикс для пути для 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