1

Android デバイスの sdCard にある XML ファイルを解析しようとしています。

このコード片 -

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 デバイスに実装しようとしたところ、このエラーが発生しました。エラーログはあまり役に立ちません。

ここで誰からも助けてもらえれば幸いです。

4

3 に答える 3

1

androidManifest.xmlxml を変更する場合、または他の 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 Developers での外部ストレージの使用に関するこの記事を参照してください。

于 2011-04-22T23:00:17.957 に答える
1

http、ftp、file などのプロトコルを指定する必要があります。ここでは、sdcard からアクセスしているため、"file://"パス全体の前になります。

これでコードスニペットを変更します。

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("file://" + "/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);
于 2013-05-17T17:04:53.460 に答える
1

マニフェストで SD カードのアクセス許可を有効化または追加しましたか?

于 2011-04-22T22:07:11.040 に答える