может найти сохраненный файл в проводнике файлов устройства, но не с устройства [duplicate]

Все стандартные коллекции имеют конструкторы копирования. Используйте их.

List original = // some list
List copy = new ArrayList(original); //This does a shallow copy

clone() был спроектирован с несколькими ошибками (см. этот вопрос ), поэтому лучше его избегать.

Из Эффективное Java 2nd Edition , пункт 11: разумно отвергнуть клон

Учитывая все проблемы, связанные с Cloneable, можно с уверенностью сказать, что другие интерфейсы не должен расширять его, а классы, предназначенные для наследования (пункт 17), не должны его реализовывать. Из-за многих недостатков некоторые экспертные программисты просто не рекомендуют переопределять метод клонирования и никогда не вызывать его, кроме, возможно, для копирования массивов. Если вы создаете класс для наследования, имейте в виду, что если вы решите не предоставлять хорошо защищенный метод клонирования, для подклассов будет невозможно реализовать Cloneable.

В этой книге также описывается многие конструкторы копирования преимуществ имеют над Cloneable / clone.

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

Рассмотрим другое преимущество использования конструкторов копирования: предположим, что у вас есть HashSet s, и вы хотите скопировать его как TreeSet. Метод clone не может предложить эту функциональность, но с конструктором преобразования легко: new TreeSet(s).

1
задан Floern 4 May 2016 в 23:26
поделиться

2 ответа

есть способ, которым я могу просто «обновить» или «обновить» то, что находится в папке «Загрузки», чтобы они отображались с помощью приложения «Загрузки Android»?

Приложение «Загрузки» показывает только то, что находится в его ContentProvider, что, в свою очередь, обусловлено тем, что было загружено через DownloadManager. Он не отображает содержимое какой-либо конкретной каталогов на устройстве и что ContentProvider не документирован или не поддерживается для независимого доступа.

Я также попытался использовать медиа-сканер Intent (для обновления галерея), но, по моему мнению, это не работает для Marshmellow.

Это или использование MediaScannerConnection и scanFile() позволит приложениям, которые запрашивают MediaStore, чтобы видеть ваш файл. Сюда входит демон MTP; MTP - это то, как настольная ОС просматривает содержимое внешнего хранилища устройства Android. Ни одно из них напрямую не влияет на приложение «Загрузки».

3
ответ дан CommonsWare 20 August 2018 в 09:02
поделиться

Я этого не делаю без класса DownloadManager. Я использую следующее в AsyncTask

DownloadManager downloadManager = (DownloadManager)mainActivity.getSystemService(mainActivity.DOWNLOAD_SERVICE);
downloadManager.addCompletedDownload(file.getName(), file.getName(), true, "application/json", file.getAbsolutePath(),file.length(),true);

. Это заставит файл появиться в приложении «Загрузки» на 6.0, даже если файл был создан локально.

2
ответ дан mkabatek 20 August 2018 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: