как составить список файлов в каталоге?

#android #arrays #load #spinner

#Android #массивы #загрузить #счетчик

Вопрос:

я новичок в разработке Android, поэтому, пожалуйста, простите меня, если это легко сделать.

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

 //creates this directory if its not there??     
File sd = new File("/sdcard/myfolder");

                 //gets a list of the files
                 File[] sdDirList = sd.listFiles(); 

                 //add them to the spinner array (this makes it crash)
                 for(int i=0;i<sdDirList.length;i  ) 
                 array_spinnerLoad[i] = sdDirList[i].getName();
  

итак, где я ошибаюсь?
есть где-нибудь полезная ссылка на простое в использовании руководство?
это не обязательно должен быть счетчик, просто какой-то список, из которого я могу выбрать

спасибо 🙂

редактировать: при этом не происходит сбой, но массив spinner не заполнен

 File[] sdDirList = sd.listFiles(); 
             if (sdDirList != null)
             {
                 array_spinnerLoad=new String[sdDirList.length];

             for(int i=0;i<sdDirList.length;i  )

             array_spinnerLoad[i] = sdDirList[i].getName();
         }
  

Комментарии:

1. Небольшой совет (не уверен, что проблема здесь в общих чертах) : не кодируйте жестко пути к таким вещам, как SD-карта, потому что эти пути различаются на разных устройствах. Используйте Environment.getExternalStorageDirectory() вместо этого. Это вернет действительный путь к основному хранилищу данных на каждом устройстве.

Ответ №1:

Если /sdcard/myfolder не существует или каталог не является каталогом, то listFiles возвращается null . Вероятно, у вас сбой с NPE. Вы можете использовать exists() и isDirectory() для диагностики того, что не так. (Кроме того, вы можете это протестировать sdDirList != null .)

P.S. Это помогло бы вам получить более точные ответы на публикацию подробной информации о сбое — например, об исключении.

Комментарии:

1. хорошо, спасибо, как я уже сказал, я новичок в этом. logcat сообщает, что в этой строке array_spinnerLoad[i] = sdDirList[i].getName(); создается nullpointerexeption

2. @user1033558 — Вот что произошло бы, если sdDirList было null — вы пытаетесь получить доступ к первому элементу массива, который не существует. (Это также произошло бы, если бы в качестве первого элемента sdDirList был null , но listFiles не возвращает null значения в массиве.)

3. спасибо, Тед, я вручную поместил файлы в каталог, и там по-прежнему ничего нет. думаю, мне нужен учебник, но я еще не нашел 1, который я понимаю.

4. @user1033558 — Следуя комментарию alextsc — используйте Environment.getExternalStorageDirectory() или Environment.getExternalStoragePublicDirectory() , чтобы получить корневой путь для ваших файлов. Не используйте в своем коде буквенную строку. Я подозреваю, что ваши файлы находятся не там, где вы думаете, что они находятся относительно вашей программы. (Кстати, как вы «вручную поместили файлы в каталог»?)

5. я поместил файлы в каталог со своего компьютера. теперь у меня все работает, спасибо. после большого количества манипуляций с кодом это, казалось, сработало, что-то связанное с настройкой адаптера до заполнения массива (я думаю, lol) извините