5

これは、デフォルトの画像フォルダにフォルダを作成するために使用しているコードです。

File imagesFolder = new File(Environment.DIRECTORY_PICTURES, "/images");
if (!imagesFolder.exists()) {
Log.d("if imagesFolder exists - 1", "False");
imagesFolder.mkdirs();
} else {
Log.d("if imagesFolder exists - 1", "True");
}
if (!imagesFolder.exists()) {
Log.d("if imagesFolder exists - 2", "False");
imagesFolder.mkdirs();
} else {
Log.d("if imagesFolder exists - 2", "True");
}

ログで私は得ています:

False

False

初めてディレクトリが存在しないためFalse、すぐにを使用して作成していmkdirs()ます。したがって、2番目のログが存在することを期待していますTrueが、それでも、コードの後半Falseでアプリケーションがクラッシュしました。NullPointerException

助けてください

ありがとうございました

4

2 に答える 2

11

Environment.DIRECTORY_PICTURES間違った方法を使用しています。パスのStringような定数です "Pictures"が、パスではありません。あなたは経由するパスを取得する必要がありますEnvironment.getExternalStoragePublicDirectory(string)

File pictureFolder = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES
        );
File imagesFolder = new File(pictureFolder, "images");
// etc
于 2012-09-26T09:44:24.620 に答える
1

最初にフォルダを生成するには、 AndroidMinifest.xmlで権限を追加する必要があります

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

次に、次のメソッドを呼び出して、フォルダを作成するディレクトリ(この名前はEnvironment。listに存在する必要があります)とフォルダ名を使用して新しいフォルダを作成します。

File outputDirectory = GetPhotoDirectory(Environment.DIRECTORY_PICTURES, "YourFolder");

この方法でフォルダを生成します

public static File GetDirectory(String inWhichFolder, String yourFolderName ) {
    File outputDirectory = null;

    String externalStorageState = Environment.getExternalStorageState();
    if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {

        File pictureDirectory = Environment.getExternalStoragePublicDirectory(inWhichFolder);

        outputDirectory = new File(pictureDirectory, yourFolderName);
        if (!outputDirectory.exists()) {
            if (!outputDirectory.mkdirs()) {
                Log.e(LogHelper.LogTag, "Failed to create directory: " + outputDirectory.getAbsolutePath());
                outputDirectory = null;
            }
        }
    }
    return outputDirectory;
}

新しく作成したフォルダの下にファイルを作成する場合は、以下のコードを使用できます

public static Uri GenerateTimeStampPhotoFileUri(File outputDirectory, String fileName){
    Uri photoFileUri = null;

    if(outputDirectory!=null) {
        File photoFile = new File(outputDirectory, fileName);
        photoFileUri = Uri.fromFile(photoFile);
    }
    return photoFileUri;
}

ファイルディレクトリでフォルダを作成した後、を呼び出してファイルを作成します。それはあなたのファイルUriを返します

Uri fileUri = GenerateTimeStampPhotoFileUri(outputDirectory, fileName);
于 2017-03-12T05:03:04.830 に答える