Как изменить функцию

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Как изменить функцию

Сообщение IlyaZh » 16 авг 2012, 18:46

Здравствуйте. Прошу помощи с конкретным примером. Имеется функция, на вxод которой передаётся xml данные в виде строки.

Код: Выделить всё

public final static Document XMLfromString(String xml) {
		Document doc = null;
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			InputSource is = new InputSource();
			is.setCharacterStream(new StringReader(xml));
			doc = db.parse(is);
		} catch (ParserConfigurationException e) {
			System.out.println("XML parse error: " + e.getMessage());
			return null;
		} catch (SAXException e) {
			System.out.println("Wrong XML file structure: " + e.getMessage());
			return null;
		} catch (IOException e) {
			System.out.println("I/O exeption: " + e.getMessage());
			return null;
		}
		return doc;
	}
Хочу переделать её, чтобы она получала данные из xml файла, хранящегося на sd-карточке.

Изменил код таким образом, ибо функция parse() может принимать File.

Код: Выделить всё

		    // получаем путь к SD
		    File sdPath = Environment.getExternalStorageDirectory();
		    // добавляем свой каталог к пути
		    sdPath = new File(sdPath.getAbsolutePath() + "/" + "DIR");
		    // формируем объект File, который содержит путь к файлу
		    File sdFile = new File(sdPath, "filename.xml");
			doc = db.parse(sdFile);
Однако, в результате получаю эксцепшн. В чём может быть проблема? Файл точно существует, т.к. выполняется проверка, и данный код запускается только в случае существования файла. Значение этой функции затем парсится.

Код: Выделить всё

Document doc = XMLfromString();
NodeList nodes = doc.getElementsByTagName("point");
Именно при добавлении этой последней строки и происходит эксцепшн, а без неё ошибок нет.

k.chaiko
Сообщения: 21
Зарегистрирован: 02 авг 2012, 17:23

Re: Как изменить функцию

Сообщение k.chaiko » 16 авг 2012, 19:05

а какой эксепшен ??

Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Re: Как изменить функцию

Сообщение IlyaZh » 16 авг 2012, 20:24

08-16 19:55:55.892: I/System.out(24209): Wrong XML file structure: Unexpected end of document
...
08-16 19:55:55.922: E/AndroidRuntime(24209): FATAL EXCEPTION: AsyncTask #1
08-16 19:55:55.922: E/AndroidRuntime(24209): java.lang.RuntimeException: An error occured while executing doInBackground()
....
08-16 19:55:55.922: E/AndroidRuntime(24209): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Вот походу всё из-за первого сообщения. Как можно проверить содержимое типа document?

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Как изменить функцию

Сообщение Finch » 17 авг 2012, 18:24

Есть кириллица? Возможно косяк из-за кодировки
CEO of a company R.id.team

Ответить