AndroidStudio не может сохранить файл на эмуляторе - PullRequest
0 голосов
/ 24 ноября 2018

Я хотел бы сохранить / создать файл в каталоге моего эмулятора, но я не могу этого сделать, и я не понимаю, что не так с моим кодом.Поэтому каждый раз, когда я пытаюсь запустить код, он говорит, что Android не может создать файл в такой директории.Может кто-нибудь, пожалуйста, объясните мне, как я это делаю.Вот код моего приложения:

открытый класс MainActivity расширяет AppCompatActivity {

private int STORAGE_PERMISSION_CODE = 1;
private File csvFile;
SimpleDateFormat TIME;

private static final String CSV_DIRECTORY = "NameOfTheDirectory";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if((ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED)){
        Toast.makeText(MainActivity.this, "You have already granted this permission",
                Toast.LENGTH_SHORT).show();
    }else {
        requestStoragePermission();
    }
}

public void makeFile(View view) {
    File csvDirectory = new File(
            Environment.getExternalStorageDirectory().getAbsolutePath() +
                    File.separator + CSV_DIRECTORY);
    if(!csvDirectory.exists()) {
        try{
            csvDirectory.mkdir();
            Log.d("StateMakeFile","Directory created");
        } catch(Exception e) {
            e.printStackTrace();
            Log.d("StateMakeFile","Directory not created");
        }
    }
    File categoryDirectory = new File(
            Environment.getExternalStorageDirectory().getAbsolutePath() +
                    File.separator + CSV_DIRECTORY + File.separator + "NameOfTheCategory");
    if(!categoryDirectory.exists()){
        try{
            categoryDirectory.mkdir();
            Log.d("StateMakeFile","CategoryDirectory created");
        }catch (Exception e){
            e.printStackTrace();
            Log.d("StateMakeFile","CategoryDirectory not created");
        }
    }
    TIME = new SimpleDateFormat("yyyyMMdd-hh:mm:ss:SSS", Locale.getDefault());
    String uniqueFileName = TIME.format(new Date());
    csvFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
            File.separator + CSV_DIRECTORY + File.separator + "NameOfTheCategory" +
            File.separator + uniqueFileName + ".csv");
    if(!csvFile.exists()){
        try{
            csvFile.createNewFile();
            Log.d("StateMakeFile","File created");
        }catch (IOException e){
            e.printStackTrace();
            Log.d("StateMakeFile","File not created");
        }
        if(csvFile.exists()) {
            try{
                PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(csvFile, true)));
                out.write("Something" + "\n");
                out.flush();
                out.close();
                Log.d("StateMakeFile","File was writed with success");
            }catch (IOException e){
                e.printStackTrace();
                Log.d("StateMakeFile","File wasnt writed with success");
            }
        }
    }

}

private void requestStoragePermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.READ_EXTERNAL_STORAGE)) {

        new AlertDialog.Builder(this)
                .setTitle("Permission needed")
                .setMessage("This permission is needed to save and load files into ssd")
                .setPositiveButton("ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
                    }
                })
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create().show();

    } else {
        ActivityCompat.requestPermissions(this,
                new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == STORAGE_PERMISSION_CODE)  {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
        }
    }
}

}

1 Ответ

0 голосов
/ 24 ноября 2018

Я не знаю, есть ли это в вашем манифесте, но вы работаете здесь с

READ_EXTERNAL_STORAGE

Попробуйте это с разрешения

WRITE_EXTERNAL_STORAGE

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...