Android: запись на SDCard не удается - почему? - PullRequest
0 голосов
/ 31 марта 2011

У меня проблема с моим кодом, который должен записать некоторую строку данных в мою SDCard.я использую класс, чтобы сделать это:

public class CVS {
    private String path;
    private String filename;

    private File dir;
    private File file;

    private FileWriter fw;

    public CVS() {
        path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/traffic/";
        filename = "data.cvs";
        file = new File(path, filename);    
        createDir();
    }

    private void createDir() {
        dir = new File(path);   
        if(!dir.exists()) {
            if(file.mkdirs() == false) {
                Log.d(Config.LOGTAG, "UHOH!!!!!!!!!!!!!!!!!!!!!!!!");
            }
        }
        else Log.d(Config.LOGTAG, "dir exists");
    }

    public void writeToFile(String data) {
        try {
            fw = new FileWriter(file);  
            fw.append(data); Log.d(Config.LOGTAG, "data saved to file...");
        }
        catch(Exception e) {
            Log.d(Config.LOGTAG, "file: " + e.getMessage());
        }
    }
}

это приводит ВСЕГДА к исключению, пойманному в writeToFile (), говоря "разрешение отказано".на самом деле, я установил права на WRITE_EXTERNAL_STORAGE в манифесте.Итак - что я делаю не так!?

дополнительная информация: реальное устройство с установленной SD-картой.нет эмулятора.Android 2.2.если я сам создаю каталог, проблема не исчезнет: (

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

Или:

  • Ваш манифест неверен, или
  • Ваше внешнее хранилище смонтировано на компьютере разработчика или
  • Ваша ручная конкатенация вашего каталога неверна
1 голос
/ 03 апреля 2012

Ваш код в порядке, но вы все равно можете добавить проверку того, вставлена ​​ли sdcard или нет, если вы запустите этот код, а sdcard не будет вставлен, тогда будет выдано исключение, хорошей практикой является то, что вы всегда должны ловить исключения.Вы можете проверить SDCard по следующему коду ...

if (android.os.Environment.getExternalStorageState().equals
                (android.os.Environment.MEDIA_MOUNTED))
 {
     //code or logic if sd card is inserted....
 }
 else
 {
     Log.e("Exception","SD Card not found!");
 }
0 голосов
/ 01 мая 2013

Требуются все ответы, но если это устройство Samsung, вам нужно добавить «/ external_sd /» к пути - потому что они решили, что им нужно прийти в голову и сломать API:

"http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=162934&messageNumber=1381&startId=zzzzz~&searchType=TITLE&searchText=sdcard

...