应用程序在首次启动时崩溃而不是第二次崩溃,同时执行相同的代码

时间:2011-01-20 12:27:56

标签: android file exception

我有这个奇怪的崩溃,我无法弄明白。

我第一次启动应用时,检查是否存在/data/Message.xml。如果没有,我创建一个。 然后我导航到一个页面,我解析该xml文件,它崩溃,因为它不存在(所以它没有创建一个)。我查看了数据目录,实际上,它没有创建一个。

然后我再次启动应用程序并执行相同的代码,而这次它创建了xml文件。

我不知道为什么它第一次没有工作,应用程序不会改变任何东西,直到它第一次崩溃,并且第二次启动时条件相同。

它是Android的东西吗?


更详细的信息:

我检查文件是否可用:

File file = new File(Environment.getDataDirectory() + "/data/com.name.app/files/Message.xml");

if(file.exists()== false){    createFirstXML();   }

createFirstXML():

public void createFirstXML() {

文件newxmlfile = new File(Environment.getDataDirectory()+“/ data / com.name.app / files / Message.xml”);   尝试{    newxmlfile.createNewFile();   } catch(IOException e){    e.printStackTrace();   }   FileOutputStream fileos = null;   尝试{    fileos = new FileOutputStream(newxmlfile);   } catch(FileNotFoundException e){    e.printStackTrace();   }   XmlSerializer serializer = 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,“Message”);

serializer.startTag(null,“Service”);    serializer.text( “应用程序”);    serializer.endTag(null,“Service”);

serializer.endTag(null,“Message”);

serializer.endDocument();    serializer.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();)但它没有给出异常???

我真的不明白..

1 个答案:

答案 0 :(得分:2)

首先,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 (No such file or directory)

此目录不存在,这就是您获得异常并且永远无法打开文件的原因。

最好使用getFilesDir(),它将返回您应用的私有文件位置,因此将与可能更改文件系统布局的未来Android版本兼容。

getFilesDir目前将返回“/data/com.themobilecompany.sosinternational/”,请尝试更改

File newxmlfile = new File(Environment.getDataDirectory() + "/data/com.themobilecompany.sosinternational/files/Message.xml");

File newxmlfile = new File(Context.getFilesDirectory() + "/files/Message.xml");

如果文件目录尚不存在,请不要忘记创建文件目录。

您是在onCreate中运行此代码,还是由onCreate或类似的东西触发?如果是这样,正常的活动生命周期将意味着每次启动应用程序时都不会运行代码。创建活动时将调用onCreate,大多数情况下,当您“退出”(即按后退按钮)时,您只是暂停活动。当你重新启动它时,Android只是重用现有的暂停活动,这样你的onCreate就不会在你的应用程序的后续执行中被调用 - 因此异常并不总是发生的原因。