Intereting Posts
Почему Android Studio не позволяет мне создавать классы Java? Горизонтальный линейный градиент с android Android-PhoneGap / WebView игнорирует метатеги просмотров? Обнаружение и обращение с необходимостью входа в wifi OnTouchEvent выполняет дважды Как обновить галерею после того, как я вставил изображение в Android? Динамическая настройка содержимого и макета виджета до размера, определяемого пользователем путем изменения размера. Android В титане, можно ли получить доступ к файлам ресурсов (xml) сторонних баннеров из модуля android? В android 4.4, прокручивание приложения из последних задач постоянно убивает приложение своим сервисом. Любая идея почему? Рекурсивная запись в executePendingTransactions Android: Поддерживается ли JDBC на устройствах Android? Обновление Android Studio Gradle до версии 0.5.0 – Gradle Migrating От 0,8 до 0,9 – Также обновление для Android Studio до 0.8.1 TextWatcher для нескольких EditText Сохранение списка в списке фрагментов при изменении ориентации Высокое разрешение экрана в Android

Список активов в подкаталоге с помощью AssetManager.list

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

У меня есть каталог, полный активов определенного типа (т. Е. «Активы / субдир»), и я хочу загрузить все файлы в этом каталоге по одному за раз.

У меня такой код:

AssetManager assetMgr = getAssets(); String[] assetsIWant = assetMgr.list("subdir"); for(String asset: assetsIWant) { doAssetyThing(asset); } 

Я пробовал миллион различных версий параметра для assetMgr.list (), и я не получаю нигде.

Если я использую «/», я возвращаю список, содержащий каталог «assets», и несколько случайных других элементов (например, META_INF). Если я передаю любую другую строку (например, «активы» или «активы /» или «/ активы» или «/ активы /» или «mysubdir» или «/ mysubdir» или «assets / mysubdir» или …), то я получаю Назад пустой массив.

К сожалению, документация несправедлива.

Кто-нибудь знает, какова правильная формула для этого параметра ()?

Solutions Collecting From Web of "Список активов в подкаталоге с помощью AssetManager.list"

Кажется, что для меня работает пустая строка. Я получаю список файлов в моем каталоге ресурсов, когда я делаю следующее:

 AssetManager aMan = appContext.getAssets(); String[] filelist = aMan.list(""); 

Я использую следующий код, чтобы указать имя файла в активах / myFolder /:

 String[] fileNames =getAssets().list("myFolder"); for(String name:fileNames){ System.out.println(name); } 

Обратите внимание, что параметр в списке методов не содержит «/».

Я не уверен, почему он работает таким образом, но когда я перечисляю "/" , я получаю материал корневого уровня, а не вещи из моего каталога "assets" . На самом деле я не нашел способ правильно перечислить папку с моими ресурсами за короткое время, потраченное на попытки.

Обходной путь, который я использую, заключается в создании каталога "subdir" внутри моего каталога "assets" . Я поместил все активы, которые хочу получить в этом "subdir" , и делаю:

String[] assetsIWant = assetMgr.list("subdir");

Я не знаю, почему "/" перечисляет сам каталог "assets" как один из его файлов, но вам не нужно указывать каталог "assets" при указании list пути. Может быть, кто-то еще знает, но я надеюсь, что этот совет поможет вам в любом случае.

Когда вам нужно иметь доступ к папке, более глубокой в ​​вашей иерархии, используйте

 String[] fileNames =getAssets().list("myFolder"+File.separator+"mysubfolder"); 

Вместо «/» внутри String, что даст вам пустой массив String.

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

Из документации андроидных проектов

Источник: http://developer.android.com/tools/projects/index.html

Библиотечные проекты не могут включать в себя исходные активы

Инструменты не поддерживают использование файлов исходных активов (сохраненных в каталоге assets / directory) в проекте библиотеки. Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets / application самого проекта приложения. Однако файлы ресурсов, сохраненные в каталоге res /, поддерживаются.

Если это так, ответ заключается в том, что вы должны включать только Raw-активы в папку с ресурсами вашего проекта приложения НЕ в любом проекте, отмеченном как библиотека (вы можете проверить это, щелкнув правой кнопкой мыши ваш проект и выбрав свойства, выберите запись в андроид Слева и посмотрите флажок библиотеки)

Предположим, у вас установлена ​​эта папка: Assets->SubDir1 . У вас есть вещи в Subdir1 такие как A.txt , B.txt , C.txt . Поэтому из каталога проекта это будет Assets/SubDir1/A.txt .

Принимая это во внимание, способ доступа к этому файлу аналогичен тому, что вы делаете, добавляя одно. Это одна вещь в вашей функции doAssetyThing . Перед этим нужно поставить каталог SubDir1 , даже если вы сделали фильтр "SubDir1" в .list("");

Пример:

  AssetManager am = getResources().getAssets(); String [] list = am.list("SubDir1"); for (String s:list) { doAssetyThing("SubDir1/" + s); //I use this next line as the start of copying a pdf from one location //to another. I wanted to give you a real function in use. InputStream inStream = am.open("SubDir1/" + s); //more code } 

Надеюсь, это ясно и поможет!

Для обеспечения наличия данного актива я использую следующие два метода:

  protected boolean hasAsset(String id) { return hasAsset(id,""); } protected boolean hasAsset(String id, String dir) { int idx = id.indexOf('/'); if (idx > 0 && idx < id.length() - 1) { if (dir.length() > 0) { dir = dir + "/" + id.substring(0,idx); } else dir = id.substring(0,idx); return hasAsset(id.substring(idx + 1), dir); } try { return Arrays.asList(context.getAssets().list(dir)).contains(id); } catch (IOException e) { e.printStackTrace(); return false; } } 

Это решение работает для меня: сохраните копию каждого файла, который вы хотите получить, из подкаталога в каталоге ресурсов тоже. Используйте такое же соглашение. Т.е. list("subdirectory")

Он не читает файлы в папке с ресурсами, но читает все «скопированные» файлы в своей подкаталоге. Weird !! Но работает!

По какой-то причине пустые каталоги не указаны.

По крайней мере, по моему опыту, они не перечислены.

То есть, если у вас есть some-dir / d1 / f1 и some-dir / d2 в области активов, и вы перечислите («some-dir»), d2 не указан.