2017-05-19 5 views
0

mkdirs()の外部ディレクトリの私のレルムデータベースのバックアップはできません名前がbackupRealmNow()で、動作します。私はので、私は<strong>輸出(実際に私の携帯電話での)外部記憶装置</strong>の私のレルムデータベース</p> <p>にしようとしています

public void backupRealmNow() { 

    Realm nowRealmForBackup = Realm.getDefaultInstance(); 

    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(); 
      Log.d("Path", "mkdirs :: " + filePath); 
     } 

     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 

は、私は、これはしばらくの間、動作しない理由を検索するので、私は(許可をチェックSDK 23 Marshmellow)しかし、私の許可が与えられました。以下のコードは、MainActivity.javaにある許可を確認しています。

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this 
       , new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE} 
       , REQUEST_RWAVAILABLE); 
    } else { 
     Log.e("Read and Write", "PERMISSION GRANTED"); 
    } 

と私の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は

ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED 
     && 
ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED 

これが条件で

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 

答えて

1

ルートディレクトリ( "/")にディレクトリ "Download"を作成しようとしています。ファイルとディレクトリを実際に作成できるパブリックストレージ領域へのパスを取得するには、​​を使用する必要があります。

+0

ありがとうございます。あなたが言ったようにいくつかの行を変更してこのバグを修正しました。/data/tyeolrik/school/data "; ' 'ファイルexportRealmFile =新しいファイル(filePath、 "backup.realm"); ' – TyeolRik

0

ルックをすることができ、言いましたWRITE_EXTERNAL_STORAGEが拒否された場合でも、この許可が要求される保証はありません。false

は本当にWRITE_EXTERNAL_STORAGEが付与されているかどうかを理解するためにORAND演算子を変更してください。または、互いに独立して権限を確認して要求することができます

+0

編集した質問をご覧ください。私はあなたが言ったように許可を確認した。しかし、logcatは "GRANTED"と言っています:( – TyeolRik

関連する問題

 関連する問題