2016-05-09 3 views
0

Я пытаюсь сохранить ArrayList объектов на внешнем хранилище, но я получаю сообщение:Запись ArrayList объектов на внешнее устройство хранения

java.io.FileNotFoundException:/хранение/1917-121E/Документы/chem/bazaChem.dat: open failed: ENOENT (Нет такого файла или каталога).

У меня есть разрешение в файле манифеста. Вот мой код:

public void saveToSD(ArrayList<Chemical> bazaChem) 
{ 
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
     String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+"/chem"; 
     try { 
      File dir = new File(path); 
      if(!dir.exists()) 
      { 
       dir.mkdir(); 
      } 
      OutputStream fos = null; 
      ObjectOutputStream oos = null; 
      File plik = new File(path, "bazaChem.dat"); 
      fos = new FileOutputStream(plik); 
      oos = new ObjectOutputStream(fos); 
      oos.writeObject(bazaChem); 
      oos.close(); 
      Toast.makeText(AddDataPanel.this, "Zapisałem bazę na karcie SD!!!", Toast.LENGTH_LONG).show(); 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
      System.out.println(ex.getMessage()); 
      Toast.makeText(AddDataPanel.this, "Wyjątek!!!", Toast.LENGTH_LONG).show(); 
     } 
    } 


} 

Любая идея, в чем проблема?

+0

Какова ваша 'targetSdkVersion' и какая версия Android вы тестируете? – CommonsWare

ответ

0

Вам необходимо явно запросить разрешение на запись внешнего хранилища на sdk23 и на любое устройство с api23 и up. Разрешение WRITE_EXTERNAL_STORAGE было перенесено на уровень опасной защиты, и пользователь должен явно согласиться с этим. Вам нужно запросить проверку собственного разрешения, чтобы отобразить диалоговое окно разрешения для пользователя и выполнить итерацию результата.

+0

Спасибо. Я не понимал, что эмулятор Androids имеет api 23. – BrunonK

+0

Отвечает ли это на ваш вопрос? Если это так, отметьте как ответ. Спасибо! – daxgirl

Смежные вопросы