我有这个奇怪的崩溃,我无法弄明白。
我第一次启动应用时,检查是否存在/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();)但它没有给出异常???
我真的不明白..
答案 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就不会在你的应用程序的后续执行中被调用 - 因此异常并不总是发生的原因。