Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于mkdirs()的原因,我无法在外部目录中备份我的领域数据库_Java_Android_Mkdirs - Fatal编程技术网

Java 由于mkdirs()的原因,我无法在外部目录中备份我的领域数据库

Java 由于mkdirs()的原因,我无法在外部目录中备份我的领域数据库,java,android,mkdirs,Java,Android,Mkdirs,我正在尝试将我的领域数据库导出到手机的外部存储中 当我按下下面的按钮时,这个名为backupreallmnow的方法可以工作 当我运行上述代码时,我的logcat说 D/Path: mkdirs :: Download/backup.realm D/Backup: Failed to Backup D/ContentValues: File exported to Path: Download/backup.realm D/mkdirs: Failed to make dir E/Permis

我正在尝试将我的领域数据库导出到手机的外部存储中

当我按下下面的按钮时,这个名为backupreallmnow的方法可以工作

当我运行上述代码时,我的logcat说

D/Path: mkdirs :: Download/backup.realm
D/Backup: Failed to Backup
D/ContentValues: File exported to Path: Download/backup.realm
D/mkdirs: Failed to make dir
E/PermissionChecker: WRITE_EXTERNAL_STORAGE PERMISSION_GRANTED
E/PermissionChecker: READ_EXTERNAL_STORAGE PERMISSION_GRANTED
D/Backup: Failed to Backup
D/ContentValues: File exported to Path: Download/backup.realm
我搜索了一段时间不起作用的原因,所以我检查了权限,因为我的手机运行在SDK 23 Marshmellow中,但是,我的权限被授予了。下面的代码是检查MainActivity.java中的权限

我的logcat说允许

我认为问题在于exportRealmFile.mkdirs不工作。你知道原因吗?正如您在日志中看到的那样,Logcat在该代码处不会得到任何异常

========= 编辑:backupRealmNow已更改为检查是否允许我的包

public void backupRealmNow() {

    Realm nowRealmForBackup = Realm.getDefaultInstance();

    int REQUESTCODE_WRITE = 100;
    int REQUESTCODE_READ = 200;

    String filePath = "";

    try {
        File dir = new File(Environment.DIRECTORY_DOWNLOADS);
        File exportRealmFile = new File(Environment.DIRECTORY_DOWNLOADS, "backup.realm");
        filePath = exportRealmFile.getPath();

        if(!dir.exists()) {
            dir.mkdirs();
        }

        if(!exportRealmFile.exists()) {
            exportRealmFile.mkdirs();
            if(exportRealmFile.exists()) {
                Log.d("mkdirs", "Success to make dir");
            } else {
                Log.d("mkdirs", "Failed to make dir");
                if(PermissionChecker.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
                    Log.e("PermissionChecker", "WRITE_EXTERNAL_STORAGE PERMISSION_DENIED so request.");
                    requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUESTCODE_WRITE);
                } else {
                    Log.e("PermissionChecker", "WRITE_EXTERNAL_STORAGE PERMISSION_GRANTED");

                }
                if(PermissionChecker.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
                    Log.e("PermissionChecker", "READ_EXTERNAL_STORAGE PERMISSION_DENIED so request.");
                    requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, REQUESTCODE_READ);
                } else {
                    Log.e("PermissionChecker", "READ_EXTERNAL_STORAGE PERMISSION_GRANTED");
                }
            }
        }

        if(exportRealmFile.exists()) {
            exportRealmFile.delete();
            nowRealmForBackup.writeCopyTo(exportRealmFile);
            Log.d("Backup", "Success to backup " + filePath);
        } else {
            Log.d("Backup", "Failed to Backup");
        }

    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        String msg =  "File exported to Path: " + filePath;
        Toast.makeText(getActivity().getApplicationContext(), msg, Toast.LENGTH_LONG).show();
        Log.d(TAG, msg);

        nowRealmForBackup.close();
    }

}
我的logcat说

D/Path: mkdirs :: Download/backup.realm
D/Backup: Failed to Backup
D/ContentValues: File exported to Path: Download/backup.realm
D/mkdirs: Failed to make dir
E/PermissionChecker: WRITE_EXTERNAL_STORAGE PERMISSION_GRANTED
E/PermissionChecker: READ_EXTERNAL_STORAGE PERMISSION_GRANTED
D/Backup: Failed to Backup
D/ContentValues: File exported to Path: Download/backup.realm
看看情况

ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
        && 
ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
即使WRITE_EXTERNAL_存储被拒绝,并且无法保证将请求此权限,此选项也可能为false


尝试将和运算符更改为或真正了解是否授予写入外部存储。或者,您可以相互独立地检查和请求权限

您正在尝试在根目录/中创建目录下载。您需要使用Environment.getExternalStoragePublicDirectory来获取公共存储区域的路径,在那里您可以实际创建文件和目录。

请注意我编辑的问题好吗?我按你说的检查了许可证。但是,logcat说:谢谢你,先生。正如你所说,我通过更改一些行来修复这个错误。file=Environment.getExternalStorageDirectory;filePath=file.getAbsolutePath+/android/data/tyeolrik/school/data;File exportRealmFile=新文件路径,backup.realm;