3

私は私を狂わせている問題に遭遇しましたxD...(最初に:みなさん、こんにちは!何らかの理由で、編集の投稿の冒頭に「みなさん、こんにちは」を追加できません...)

ユースケースは次のとおりです。プロジェクトのrawフォルダーにxmlファイルが保存されています。xmlファイルは次のようになります。

<myxml ....>Some text<innerelement ... /></myxml>

xmlというフォルダーがあることは知っていますが、必要なのは文字列です。XmlResourceParser(context.getResources()。getXml(id)を呼び出すときに取得します)ではありません。

さて、この生のxmlファイルをロードするために私がすることは次のとおりです。

context.getResources().openRawResource(R.raw.myfile)

これにより、InputStreamが返され、次のコードを使用して文字列に変換しようとします。

try {
   byte[] buffer = new byte[stream.available()];
   stream.read(buffer);
   stream.close();
   return new String(buffer);
} catch (IOException e) {
   // Error handling
}

結果の文字列をlogcatに出力すると、数行にまたがる正方形の束だけが表示されます。

だから私はそこに何かが欠けているに違いないと思います...私はすでにこの入力ストリームを文字列に変換するいくつかの方法を試しましたが、それらはすべて同じ結果になりました(上の画像を参照)...

よろしくお願いいたします。

zainodis

更新2011年11月12日

.xmlの代わりに拡張子.txtを使用して、xmlファイルをrawフォルダーに保存してみました。これで、変換はOutOfMemory例外oOで失敗します。このスレッドからの提案を使用してデータを変換する別の方法を試しました-すべてOutOfMemoryExceptionが発生しました:

11-12 06:09:22.671: I/TestRunner(652): java.lang.OutOfMemoryError
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.expandBuffer(Scanner.java:2183)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.readMore(Scanner.java:2143)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.findPostDelimiter(Scanner.java:2121)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.setTokenRegion(Scanner.java:2031)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:1017)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:993)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileapp.framework.core.configuration.utility.StringUtils.InputStreamToString(StringUtils.java:69)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileoffences.domainmodel.serialization.test.CorpusDelictiFactoryTest.testSerialization(CorpusDelictiFactoryTest.java:32)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invokeNative(Native Method)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invoke(Method.java:507)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runTest(TestCase.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runBare(TestCase.java:127)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult$1.protect(TestResult.java:106)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.runProtected(TestResult.java:124)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.run(TestResult.java:109)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.run(TestCase.java:118)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
11-12 06:09:22.671: I/TestRunner(652):  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
4

3 に答える 3

5

このコードを に入れましたonCreate(...)。xml ファイル内の文字列を表示できます。

InputStream stream = getResources().openRawResource(R.raw.data);
try {
        byte[] buffer = new byte[stream.available()];
        stream.read(buffer);
        stream.close();
        Log.i("xml", new String(buffer));
} catch (IOException e) {
    // Error handling
}
于 2011-11-11T14:03:37.753 に答える
1

あなたがまだ解決策を探しているかどうかはわかりませんが、あなたまたは他の誰かがこれを解決しようとしている場合は、ここで私が行ったこととそれを機能させました. @wannik が行ったことを正確に使用しましたが、使用したい charsetName を指定しました。したがって、私のコードは次のようになります。

InputStream stream = getResources().openRawResource(R.raw.data);
try {
    byte[] buffer = new byte[stream.available()];
    stream.read(buffer);        
    stream.close();
    String xml = new String(buffer, "UTF-8");      // you just need to specify the charsetName   
} catch (IOException e) {
    // Error handling
}

お役に立てれば。

于 2013-02-05T13:34:09.463 に答える
0

あなたの説明から判断すると、raw フォルダーに配置された XML ファイルは、パッケージ化前の残りの XML ファイルと同様にコンパイルされたようです。私は自分でそれを試していないので、確かなことは言えません。XML ファイルの名前を .txt 拡張子に変更してから読み取ってみてください。文字列としてのみ必要なので。

于 2011-11-11T14:04:17.110 に答える