#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) извините