Java/Android崩溃ApacheCommonsio2。4.jar
我试图使用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()
调用,错误永远不会发生,代码在任何地方都可以正常运行
使用EclipseIndigo在Android的API8/10上运行
编辑-Logcat:
08-07 18:40:11.409: I/System.out(1395): debugger has settled (1363)
08-07 18:40:14.399: W/KeyCharacterMap(1395): No keyboard for id 0
08-07 18:40:14.399: W/KeyCharacterMap(1395): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
不要认为它给出了任何提示,但这是调试程序解决后logcat给出的所有提示
编辑2-
为了更好的衡量,我只是补充了一点
<uses-permission 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE" />
但还是不行
编辑3- 我开始考虑apache commons-io-2.4。jar天生不适合Android。是吗
编辑4- 如果有人想尝试一下,这是我的代码。它是在Windows7、Eclipse Indigo中制作的。代码基于“Hello Android”翻译部分。我所要做的就是将一些JSON提取成一个字符串,并将其保存到SD卡中。但是,它在这里已经演变成了一个谜。。。 https://dl.dropbox.com/u/10790286/Translate.zip(参见TranslateTask.java第111行)
编辑5-
有趣的更新。在调试过程中,当我手动将FileUtils.writeStringToFile(new java.io.File("/mnt/sdcard/logt.txt"), "test");
放入eclipse表达式框时,会出现以下错误
An exception occurred: java.lang.NoSuchMethodError
我不明白为什么会出现此错误,因为1)WriteStringToFile()函数位于commons io源中。2) 我可以实例化一个FileUtils对象(3)我将它导入到我的程序中
这是怎么回事
# 1 楼答案
写入路径
"c:\\temp\\logt.txt"
在Android上不起作用。您可以使用Environment.getExternalStorageDirectory().toString() + "/log.txt"
之类的东西写入SD卡编辑: 下面是我的Galaxy Nexus:
# 2 楼答案
虽然该程序在complier中成功运行,但在android设备中运行时程序崩溃。因为在运行期间,它只检查android依赖项中的jar文件。我也有类似的问题。我在preferences/properties中解决了这个问题->;java构建。勾选外部jar文件