Ошибка синтаксического анализа Android Android - «Не удалось открыть ... / directory / container.xml» - PullRequest
1 голос
/ 23 апреля 2011

Я пытаюсь проанализировать файл XML, который находится на SD-карте на моем устройстве Android.

Этот кусок кода -

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);

Выводит эту ошибку -

Не удалось открыть /mnt/sdcard/Speedr/pg55/META-INF/container.xml

Причина: java.net.MalformedURLException: протокол не найден: /mnt/sdcard/Speedr/pg55/META-INF/container.xml

Ради простоты я изменил расположение sp.parse (), но это именно то, что передается методу в реальном коде. Я также убрал скобки try / catch, которые должны его окружать.

Файл определенно находится там, я могу увидеть его, если я найду его на моем телефоне или компьютере, и его местоположение также будет правильным, поскольку оно не выдает мне ошибку FileNotFound.

Первоначально я построил этот код в автономной Java и пытался внедрить его на устройство Android и столкнулся с этой ошибкой. Журнал ошибок действительно менее чем полезен.

Я был бы очень признателен за любую помощь, которую я могу получить от кого-либо здесь.

Ответы [ 3 ]

1 голос
/ 23 апреля 2011

Пожалуйста, убедитесь, что у вас есть следующее разрешение, включенное в ваш androidManifest.xml, на случай, если вы захотите изменить свой xml или сохранить другое:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

и измените свой код на:

final File xml = new File(Environment.getExternalStorageDirectory().
        getAbsolutePath() + "Speedr/pg55/META-INF/container.xml");
sp.parse(xml, xmlHandler);

Таким образом, вы передаете файл в анализатор, поэтому вам не нужно указывать протокол file://.
Попробуйте не использовать статический путь. Внешний путь к хранилищу изменяется в зависимости от устройства.
Использование Environment.getExternalStorageDirectory() является хорошей практикой.

Возможно, вы также захотите проверить, существует ли файл xml и т. Д., Но в основном именно так он и должен работать.

См. эту статью об использовании внешнего хранилища в Android-разработчиках, для дальнейших проверок состояния хранилища и т. Д.

1 голос
/ 17 мая 2013

Вы должны указать протокол, такой как http, ftp, файл и т. Д. Здесь вы обращаетесь к нему с SDCard, поэтому он будет "file://" перед всем путем.

Теперь измените фрагмент кода с помощью этого,

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("file://" + "/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);
1 голос
/ 23 апреля 2011

Вы включили или добавили разрешения SD-карты в манифест?

...