0

org.apache.commons.io.FileUtils静的メソッドを使用して、文字列内の値をローカルシステム上のファイルに保存しようとしていますwriteStringToFile

そのため、最初にcommons-io-2.4.jarをそのjavadocsとソースとともにダウンロードし、Javaビルドパスを介してEclipseプロジェクトにインポートしました。すべてが正常にコンパイルされます。

ただし、単純な行を追加すると、次のようになります。

org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File(Environment.getExternalStorageDirectory().toString() + "/logt.txt"), rslt.toString());

プログラムがクラッシュします。しかし、そのステートメントの近くではクラッシュしません。代わりに、この関数を呼び出すメソッドを含むオブジェクトのコンストラクターでクラッシュします。

言い換えると

  • コードの前半で、オブジェクトTranslateTaskを作成しました。
    • これには、関数呼び出しdoTranslate()が含まれています。
    • writeStringToFile呼び出しは、doTranslate()呼び出し内で行われます。
  • ただし、TranslateTaskオブジェクトをインスタンス化すると、実際のクラッシュが発生します。
  • しかし、writeStringToFile()の呼び出しをコメントアウトすると、クラッシュは発生しません。
    • doTranslate()呼び出しではクラッシュは発生しませんが...
    • したがって、writeStringToFile()に言及するだけで、それを含むオブジェクトをインスタンス化すると、プログラムがクラッシュします。

それをより簡単にするために、私はTry, catch (RejectedExecutionException e)ブロック内のオブジェクトをインスタンス化しますが、代わりにプログラムはこの部分でクラッシュします:

PathClassLoader.findClass(String) line: 243 **Last call in the stack**
PathClassLoader(ClassLoader).loadClass(String, boolean) line: 573   
PathClassLoader(ClassLoader).loadClass(String) line: 532    
Translate$4.run() line: 159  **Crash happens here where I instantiate a TranslateTask object**

したがって、PathClassLoader...これをデバッグする方法がわかりません。私が知っているのは、org.apache.commons.io.FileUtils.writeStringToFile()呼び出しを称賛した場合、エラーが発生することはなく、コードはどこでも正常に実行されるということだけです。

Eclipse Indigoを使用して、AndroidのAPI8/10でこれを実行します。

編集-Logcat:

08-07 18:40:11.409:I / System.out(1395):デバッガーが解決しました(1363)

08-07 18:40:14.399:W / KeyCharacterMap(1395):ID0のキーボードがありません

08-07 18:40:14.399:W / KeyCharacterMap(1395):デフォルトのキーマップを使用:/system/usr/keychars/qwerty.kcm.bin

ヒントが得られるとは思わないが、デバッガーが落ち着いた後にlogcatが提供するのはこれだけです。

EDIT2-良い意味で、私はちょうど追加しました <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> が、それでも行きません

編集3-apachecommons-io-2.4.jarはAndroidでは本質的に機能しないと思い始めています。それでいいの?

EDIT4-誰かがそれをクラックしたい場合に備えて、ここに私のコードがあります。これは、Windows 7、EclipseIndigoで作成されています。コードは「HelloAndroid」の翻訳セクションに基づいています。私がやろうとしているのは、JSONを文字列に抽出し、SDカードに保存することだけです。しかし、ここではこの謎に進化しています... https://dl.dropbox.com/u/10790286/Translate.zip(TranslateTask.javaの111行目を参照)

EDIT5-興味深いアップデート。デバッグ中に手動でFileUtils.writeStringToFile(new java.io.File("/mnt/sdcard/logt.txt"), "test");日食式ボックスに入れると、次のエラーが発生します

例外が発生しました:java.lang.NoSuchMethodError

1)WriteStringToFile()関数がcommons-ioソースにあるため、なぜこのエラーが発生するのかわかりません。2)FileUtilsオブジェクトをインスタンス化できます。3)プログラムにインポートしました。

何が起きてる?

4

2 に答える 2

1

パスへの書き込みは、"c:\\temp\\logt.txt"Android では機能しません。Environment.getExternalStorageDirectory().toString() + "/log.txt"SDカードへの書き込みなどに使えます。

編集: 次は私のGalaxy Nexusで機能しました:

try {
  FileUtils.writeStringToFile(new File(Environment.getExternalStorageDirectory(),"log2.txt"), "HelloNow");
} catch (IOException e) {
  Log.e(TAG,e.getMessage())
}
于 2012-08-07T18:24:59.260 に答える
0

プログラムはコンパイラで正常に実行されますが、Android デバイスで実行中にプログラムがクラッシュします。実行時に Android 依存関係内の jar ファイルのみをチェックするためです。私も同様の問題を抱えていました.Preferences/properties -> Java build .Tick the external jar file .Tick the external jar file .

于 2012-08-07T18:58:37.127 に答える