私のアプリケーションでは、ストレージの DirectoryPath を常に使用します。私のMAINでは、最初にディレクトリを作成しています。これを文字列に保存して、実際のデータベースを作成するときなど、他の方法で使用したいのですが、このパスに作成したいです。私はみんなの推奨事項にうんざりしていて、代わりにブール値を返しています。その値をまったく使用するかどうかはわかりません。
ここに私が持っているものがあります:
private static boolean mCreateDatabaseDirectory(String dbPath) {
boolean directoryCreated = true;
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
Log.d("GENERAL", "Moving to mExternalStorageAvailable");
mExternalStorageAvailable();
Log.d("GENERAL", "Returning values of Available and Writeable");
if(mExternalStorageAvailable = mExternalStorageWriteable = true){
Log.d("GENERAL", "Booleans are True, creating Directoy");
File directoryPath = new File(Environment.getExternalStorageDirectory().toString()+"/APP/database");
Log.d("GENERAL", "directoryPath = " + directoryPath);
if(!directoryPath.exists()) {
directoryPath.mkdirs();
String databasePath = directoryPath.toString();
Log.d(DATABASE, "Database directory path created as " + databasePath);
//If we try to create the file but there is a problem then Log the error
if(!directoryPath.mkdirs()){
Log.e("DATABASE", "Problem creating Database Directory");
directoryCreated = false;
}
Log.d("GENERAL", "Directory did not exist but was created");
return directoryCreated;
}else {
Log.d("GENERAL", "Directory already exists, nothing to do here");
return directoryCreated;
}
}
return directoryCreated;
}
もう1つの問題は、これが実際にSDCARDにディレクトリを作成しないことです。/storage/emulated/0/APP/database にディレクトリを作成します。これは、おそらく外部として指定された内部ストレージであると想定しています。このアプリが 100 MB 以上のデータベースの作成を開始し、スペースがない場合、それは問題になります。どうすれば SDCARD にアクセスできますか?
私の何百万ものコメントを無視してください。NullPointer エラーをデバッグしていて、具体的にどの行が問題であるかを特定する必要がありました。後で消去します。