Android 目录不存在时应用程序崩溃
嗨,我是安卓的业余爱好者,所以我可能没有意识到一些显而易见的事情 我有一个方法,用特定目录中的苍蝇列表填充全局文件数组变量。问题是,如果以前使用“我的应用程序”在目录中保存文件,那么一切都可以正常工作。但是,如果用户没有保存文件,则会弹出一条错误消息,说明他们尚未保存文件 我会检查目录是否存在,但当目录尚未创建时,应用程序会崩溃 这是我的代码看起来像任何援助将不胜感激Android 目录不存在时应用程序崩溃,android,file,file-io,android-file,Android,File,File Io,Android File,嗨,我是安卓的业余爱好者,所以我可能没有意识到一些显而易见的事情 我有一个方法,用特定目录中的苍蝇列表填充全局文件数组变量。问题是,如果以前使用“我的应用程序”在目录中保存文件,那么一切都可以正常工作。但是,如果用户没有保存文件,则会弹出一条错误消息,说明他们尚未保存文件 我会检查目录是否存在,但当目录尚未创建时,应用程序会崩溃 这是我的代码看起来像任何援助将不胜感激 private void getTemplates() { //Gets file directo
private void getTemplates()
{
//Gets file directory for saved templates
File finalMarkTemplateDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Final Mark Templates");
//Checks if path exists in other word if any templates have been saved before
if(finalMarkTemplateDir.exists())
{
templatePaths = finalMarkTemplateDir.listFiles();
}
else
{
Toast.makeText(this, "No previous templates have been saved.", Toast.LENGTH_LONG).show();
setResult(RESULT_CANCELED);
finish();
}
}
我也是一个业余爱好者,您的代码中没有创建文件,调用新的file()方法不会创建文件。请检查一下
try {
finalMarkTemplateDir.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当我调用setResult和finish方法时,我成功地解决了我的问题。我没有意识到程序流会返回到onCreate方法,这意味着onCreate中的其余方法调用仍在被调用,它们需要templatePaths数组 因此,基本上我认为finish会停止处理并返回调用类(使用startActivityForResult)。现在,我从onCreate调用finish,并使用一个布尔值来确定是否可以成功访问该目录
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.dialog_load_template);
boolean fileLoadStatus = getTemplates();
if(fileLoadStatus)
{
populateTemplateList(templatePaths);
}
else
{
setResult(RESULT_CANCELED);
finish();
}
}
private boolean getTemplates()
{
boolean fileLoadStatus = false;
//Gets file directory for saved templates
File finalMarkTemplateDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Final Mark Templates");
//Checks if path exists in other word if any templates have been saved before
if(finalMarkTemplateDir.isDirectory())
{
templatePaths = finalMarkTemplateDir.listFiles();
fileLoadStatus = true;
}
else
{
Toast.makeText(this, "No previous templates have been saved.", Toast.LENGTH_LONG).show();
}
return fileLoadStatus;
}
谢谢你的帮助,这不是问题所在。该文件是在其他地方创建的。当我调用setResult和finish方法时,我成功地解决了我的问题。我没有意识到程序流会返回到onCreate方法,这意味着onCreate中的其余方法调用仍在被调用,它们需要templatePaths数组。所以基本上我认为finish会停止处理并返回调用类。现在,我从onCreate调用finish,并使用一个布尔值来确定是否可以成功访问该目录。