Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.10.2013, 18:09
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 1  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
По умолчанию Конфигурационный файл (Android)

Застопорился на одном проэкте, решил создать Визуал Новеллу для Android, но проблема с созданием кофиг файла. Делаю подобную вещь впервые, гуглил и нашел код, на компьютере он записывал в хранилище данных(applicationStorageDirectory.nativePath), создавало там файл config.xml, где хранились конфигурационный данные приложения. На компе все прекрасно работало, загружало файл, при IO_ERROR, оно создавало файл и записывало в него настройки по-умолчанию, пускало загрузку файла заново. На телефоне оно не захотело создать или загрузить файл. Ошибок не видно, телефон ведь. Я сначала думал, что просто не отправлялся IO_ERROR, поэтому поставил создание файла в инициализации класса-загрузчика XML-файла. Результатов не дало.

Добавлено через 2 минуты
applicationStorageDirectory я трейсил на компе, там вывело Documents&Settings/AppData/Roaming/AppName

Добавлено через 42 минуты
Стоп, я, кажется, понял, в чем проблема. Сейчас проверю разрешения приложения.

Добавлено через 52 минуты
Нет, ничего не изменилось. На телефоне ничего не изменилось.

Добавлено через 2 часа 4 минуты
Итак, что я нашел. Открыв RootExplorer, зашел в папку data, где по данным от Adobe хранится кэш и сторэйджи всех AIR-приложений. Вот, покопавшись в ней, нашел-таки свой файл, зайдя еще в некоторые директории. Все с ним в порядке. Читал он файл по тому же пути, по которому и отправлял. Почему не хотел загружать его - без понятия . Может кто-то мне подскажет об особенностях загрузки файлов из локального хранилища, или проблема, получается, в самом приложении?

Старый 13.10.2013, 12:02
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Проблема в приложении.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.10.2013, 14:54
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Судя по тому, что происходит в приложении, событие окончания загрузки файла из локального хранилища вообще не происходит.
Сейчас кину код класса.

Но, повторюсь, на компьютере все нижеприведенное работает без проблем.

Код AS3:
 
//Класс doXML, который проводит все операции с XML.
 
package com.instruments 
{
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.display.MovieClip;
 
	public class doXML extends EventDispatcher
	{
		public static const SETTINGS_LOADED:String = "Settings is Loaded";
		private var loader:URLLoader;
		public var xml:XML;
 
		public function doXML()
		{
			trace("class doXML initialize();");
		}
 
		public function loadXML(path:String):void
		{
			trace("function doXML.loadXML();");
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, onLoadXML);
			loader.load(new URLRequest(path));
			loader.addEventListener(IOErrorEvent.IO_ERROR, createDoc);
		}
 
		private function createDoc(e:IOErrorEvent = null):void
		{
			trace("function doXML.createDoc();");
			var fileToCreate:File = File.applicationStorageDirectory;
			fileToCreate = fileToCreate.resolvePath("config.xml");
			var fileStream:FileStream = new FileStream();
			fileStream.open(fileToCreate, FileMode.WRITE);
			fileStream.writeUTFBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><configs><config><sound>true</sound><music>true</music><soundvalue>0.7</soundvalue><musicvalue>0.5</musicvalue><language>0</language> <!-- English 0, Russian 1 --> <progress>0</progress> </config></configs>")
			fileStream.close();
			this.loadXML(fileToCreate.nativePath);
		}
 
		private function onLoadXML(e:Event):void
		{
			trace("function doXML.onLoadXML();");
			xml = XML(loader.data);
			var xmlLoaded:Event = new Event(SETTINGS_LOADED);
			dispatchEvent(xmlLoaded);
		}
 
		public function getSettings():XML
		{
			trace("function doXML.getSettings();");
			return xml;
		}
 
		public static function saveSettings(settings:Array):void
		{
			trace("static function doXML.saveSettings();");
		}
	}
}
 
//Теперь код из кадра, который пользуется этим классом.
//ooXML - экземпляр класса doXML;
 
import com.game.*;
import flash.filesystem.File;
 
stop();
 
var path:File = File.applicationStorageDirectory;
path = path.resolvePath("config.xml");
 
showMenu();
 
ooXML.loadXML(path.nativePath);
ooXML.addEventListener(doXML.SETTINGS_LOADED, onSettingsLoad);
 
function onSettingsLoad(e:Event):void
{
	trace("function onSettingsLoad();");
	settingsXML = ooXML.getSettings(); // Получаем загруженные настройки в переменную settingsXML;
 
	menu.play(); // В приложении на телефоне этого не происходит, соответственно данное событие не было получено.
	//Если же убрать stop(); внутри меню, то меню анимируется. Иначе нет, тоесть этот код не выполняется.
 
	settingsList = settingsXML.config; // Эта переменная типа XMLList.
	currentProgress = settingsList.progress; // currentProgress:int
	titles = null; // Удаляем из памяти заставку приложения.
 
	var theSettings:Array = [settingsList.sound, settingsList.music, settingsList.soundvalue, settingsList.musicvalue, settingsList.language, settingsList.progress];
	settings.setSettings(theSettings); // Отсылаем классу Settings загруженные настройки.
}
 
function showMenu():void
{
	menu = new Menu();
	addChild(menu);
	menu.alpha = 0.6;
	Element.align(menu, "right");
	menu.y = 100; // Знаю, нехорошо.
}
 
var game:Game = new Game(settings, stage);

Старый 13.10.2013, 17:38
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
http://help.adobe.com/ru_RU/as3/dev/...de46-7fe4.html

Цитата:
Примечание. В Android свойство nativePath не может быть использовано для получения доступа к файлам в пакете приложения. Свойство nativePath представляет собой пустую строку. При обращении к файлам в каталоге приложения всегда используйте URL вместо собственного пути.
Зачем вам вообще, в данном случае URLLoader? Загружайте свой xml, через FileStream.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.10.2013, 18:26
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 5  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от alatar Посмотреть сообщение
http://help.adobe.com/ru_RU/as3/dev/...de46-7fe4.html



Зачем вам вообще, в данном случае URLLoader? Загружайте свой xml, через FileStream.
Спасибо вам большое.
Я просто ранее всегда писал лишь под Flash Player, вот и умею грузить только лоудерами.
Это, можно считать, мой первый проэкт под AIR, не считая простых экспериментов.

Сейчас начну гуглить про загрузку FileStream'ом)

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:50.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.