我遇到了这个奇怪的崩溃,我无法弄清楚。
第一次启动应用程序时,我检查/data/Message.xml 是否存在。如果没有,我就创建一个。 然后,我导航到解析该 xml 文件的页面,但它崩溃了,因为它不存在(因此它没有创建一个)。我查看了数据目录,确实,它没有创建一个。
然后我再次启动该应用程序,它执行相同的代码,而这次它确实创建了 xml 文件。
我不知道为什么它第一次不起作用,该应用程序不会改变任何东西,直到第一次崩溃,并且第二次启动时情况相同。
这是 Android 的东西吗?
更多详细信息:
我检查文件是否可用:
File file = new File(Environment.getDataDirectory() + "/data/com.name.app/files/Message.xml");
if (file.exists() == false) { 创建FirstXML(); }
createFirstXML():
public void createFirstXML() {
File newxmlfile = new File(Environment.getDataDirectory() + "/data/com.name.app/files/Message.xml"); 尝试 { newxmlfile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } FileOutputStream fileos = null; 尝试 { fileos = 新的 FileOutputStream(newxmlfile); } catch (FileNotFoundException e) { e.printStackTrace(); } XmlSerializer 序列化器 = android.util.Xml.newSerializer(); 尝试 { Serializer.setOutput(fileos, "UTF-8"); Serializer.startDocument(null, Boolean.valueOf(true)); Serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, "消息");
serializer.startTag(null, "服务"); 序列化器.text(“应用程序”); Serializer.endTag(null, "服务");
serializer.endTag(null, "消息");
serializer.endDocument(); 序列化器.flush(); fileos.close(); } catch (异常 e) { e.printStackTrace(); } }
日志:
java.io.IOException: No such file or directory
bla
bla
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory)
bla
bla
java.lang.IllegalArgumentException
bla
bla
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory)
bla
bla
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory)
bla
bla
我第二次启动应用程序时,它也找不到 Message.xml(因为它执行 createFirstXML();),但它没有给出异常???
实在是没看懂..
最佳答案
首先,getDataDirectory 可能不是您想要的。它(当前)返回安装包的顶级目录,因此当您将“/data/com.themobilecompany.sosinternational/files/Message.xml”附加到它时,您会得到“/data/data/com.themobilecompany.sosinternational”/files/Message.xml”。查看您的异常信息:
java.io.FileNotFoundException:/data/data/com.themobilecompany.sosinternational/files/Message.xml(没有此类文件或目录)
此目录不存在,这就是您收到异常并且永远无法打开该文件的原因。
最好使用 getFilesDir()
,它将返回您的应用的私有(private)文件位置,因此将与可能更改文件系统布局的 future Android 版本兼容。
getFilesDir 当前将返回“/data/com.themobilecompany.sosinternational/”,因此请尝试更改
File newxmlfile = new File(Environment.getDataDirectory() + "/data/com.themobilecompany.sosinternational/files/Message.xml");
至
文件 newxmlfile = new File(Context.getFilesDirectory() + "/files/Message.xml");
如果文件目录尚不存在,请不要忘记创建它。
您是否在 onCreate 中运行此代码,或者它是由 onCreate 或类似的东西触发的?如果是这样,正常的 Activity 生命周期将意味着您的代码不会在每次启动应用程序时运行。 onCreate 将在您的 Activity 创建时被调用,大多数情况下,当您“退出”(即按后退按钮)时,您只是暂停您的 Activity。当您重新启动它时,Android 只是重用现有的挂起的 Activity ,因此您的 onCreate 不会在您的应用程序的后续执行中被调用 - 这就是为什么异常并不总是发生的原因。
关于android - 应用程序在第一次启动时崩溃,而不是第二次,但它执行相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747100/