1 голос
 
862 просмотра
4.02.2019 / 13:55  Nolosha

Одноразовый Файловый менеджер

Создаю я на андроид ФилеМанагер. Начальный путь для открытия у меня - "/". Все норм запускается, но стоит мне зайти в любую папку и вылетает приложение. Прописала начальный путь - "/storage/sdcard0/"(у меня такое точно есть). И вылет.
Пришла к выводу что открывается только один путь - "/".
Узнала что вылет провоцируется ошибкой NullPointerException, текст: Attempt to get length of null array.
Понятно, что это значит: Пытались получить длину нулевого массива. Все пути которые я открывали имели файлы и папки. Но есть еще коечто! Мне известно что ошибка была на линии 90! А на линии 90 у нас :
  1. ListAdapter afapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,lust); //Луст - массив,  не список!
Вопрос: В чем проблема???
4.02.2019 / 17:59  aNNiMON
Стектрейс можно увидеть?
Ответы
 
1 голос
 
# 4.02.2019 / 21:11  aNNiMON
Скорее всего массив lust формируется в результате вызова метода list() класса File. Этот метод возвращает null, если не удаётся получить список файлов (смотрите документацию).
Желательно результат вызова проверить на null:
  1. String[] files = dir.list();
  2. if (files == null) {
  3.     files = new String[0];
  4. }

Дальше, раз в папке sdcard0 возвращается null, значит, смею судить, что у приложения нет права на доступ к внешнему хранилищу.
4.02.2019 / 21:52  vlavolk
Либо путь не тот
 
0 голосов
 
# 5.02.2019 / 08:36  Nolosha
Annimon, спасибо что обратили мое внимание! Причина была действительно такая: мы не могли получить доступ к другим файлам из-за отказа в правах. А ведь можно было бы и сразу... сразу прописать в манифест:
  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Что же я забыла про это)))
Еще раз спасибо!
 
0 голосов
 
# 4.02.2019 / 19:20  Nolosha
Annimon, держите:
  1. java.lang.NullPointerException: Attempt to get length of null array
  2.   at
  3.       com.myapp.MainActivity.fillListview(MainActivity.java:90)
  4.   at
  5. com.myapp.MainActivity.browseTo(MainActivity.java:82)
  6.   at
  7. com.myapp.MainActivity$1.onItemClick(MainActivity.java:53)
  8.   at
  9. android.widget.AdapterView.performItemClick(AdapterView.java:300)
  10.   at
  11. android.widget.AbsListView.performItemClick(AbsListView.java:1143)
  12.   at
  13. android.widget.AbsListView$PerformClick.run(AbsListView.java:3048)
  14.   at
  15. android.widget.AbsListView$3.run(AbsListView.java:3837)
  16.   at
  17. android.os.Handler.handleCallback(Handler.java:739)
  18.   at
  19. android.os.Handler.dispatchMessage(Handler.java:95)
  20.   at
  21. android.os.Looper.loop(Looper.java:135)
  22.   at
  23. android.app.ActivityThread.main(ActivityThread.java:5235)
  24.   at
  25. java.lang.reflect.Method.invoke(NativeMethod)
  26.   at
  27. java.lang.reflect.Method.invoke(Method.java:372)
  28.   at
  29. com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
  30.   at
  31. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Кста, заметила что нормально заходит в корневую папку tmp-mksh, и еще в несколько. А туда куда надо (/storage/,/sdcard/) нет.
 
-3 голоса
 
# 4.02.2019 / 16:47  MasterOS
ListAdapter afapter?
По-моему: ListAdapter adapter
  1. ListAdapter adapter=new ArrayAdapter<String>(this,        android.R.layout.simple_list_item_1,lust);
  2. example.setAdapter(adapter);
Изм. MasterOS от 4.02.2019 / 16:48
4.02.2019 / 17:29  Nolosha
!!! Masteros, это не ответ! Имя данного объекта может быть хоть listaaaaaaaaadapter.
4.02.2019 / 17:43  MasterOS
Извините :)
Всего: 4

Реклама

Мы в соцсетях

tw tg yt gt