Гость
Map
Форумы / Разработка под мобильные платформы [игнор отключен] [закрыт для гостей] / Библиотека от Apache для работы с FTP на android. Ошибка / 8 сообщений из 8, страница 1 из 1
24.04.2019, 13:45
    #39805742
Vladamir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
приложение использует библиотеку org.apache.commons.net.ftp для взаимодействия с удаленным хостом по FTP протоколу.

В приложении имеются 3 шт. Fragment. Каждый фрагмент отвечает за (подключение к серверу, авторизацию пользователя, получение списка файлов с хоста).

Fragment - ы взаимодействуют с MainActivity (далее MA) с помощью интерфейсов определенных в каждом фрагменте.

Один из Fragment-ов
Код: java
1.
2.
3.
public interface onUserConnecting{
        public void userconnect(String Username, String Password, String ConnectionMode);
    }



в свою очередь MA реализует эти методы. И когда в Fragment срабатывает нажатие кнопки в MA происходит вызов этого метода. Так у меня работает взаимодействие между Фрагментами и МА.

Теперь обрисую ПРОБЛЕМУ:
-- 1 фрагмент получает от пользователя имя Хоста и Порт по нажатию на кнопку, передает информацию в MA.
-- MA совершает подключение к хосту и уведомляет пользователя о прогрессе (подключено или не подключено)
-- после удачного соединения 2 фрагмент получает от пользователи Логин и Пароль по нажатию на кнопку, передает информацию в MA.
-- MA совершает авторизацию на хосте по полученным данным и уведомляет пользователя о прогрессе (авторизировано или нет)
-- после удачной авторизации пользователь переходит к Fragment 3. После загрузки фрамента он должен получить список
файлов коренного каталога(ошибка происходит здесь).

Подключение, авторизация и получение файлов производятся (из разных Thread). Однако ошибка выплывает только при получении списка фалов. Если совершаю получение файлов в том потоке где происходит авторизации то все OK, однако если совершаю получение из отдельного потока, то выбивает ошибку, которую не могу отследить в Logcat ничего не отображается(участок кода окружен try - cath однако в логи ничего не отправляется). На всякий случай скину все 3 метода. Спасибо большое!

Код: java
1.
RemotrServer

- это объект класса FTPClient библиотеки commons.net
Код: java
1.
FileFragment.updateFileList(stringArray) 

- фрагмент в котором находится ListView(принимает список файлов в виде массива строк
и отображает их)


Код метода подключения к серверу:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
@Override
    public void connectToServer(final String HostName, final int PortNumber) {
        if (backGroundWroker.isAlive()){
            handler.sendEmptyMessage(8);
            return;
        }
 
       backGroundWroker = new Thread(new Runnable() {
            @
Override public void run() { try { if (RemoteServer.isConnected()) { isLoggined = false; RemoteServer.disconnect(); handler.sendEmptyMessage(6); } else { RemoteServer.connect(HostName, PortNumber); if (RemoteServer.isConnected()) { handler.sendEmptyMessage(0); flag = false; } else { handler.sendEmptyMessage(1); } } } catch (IOException e){ e.printStackTrace(); } } }); backGroundWroker.start(); }



Код метода авторизации на сервере:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
@Override
    public void userconnect(final String Username, final String Password) {
        if(backGroundWroker.isAlive()){
            handler.sendEmptyMessage(7);
            return;
        }
 
        backGroundWroker = new Thread(new Runnable() {
            @Override
            public void run() {
                if (!RemoteServer.isConnected()) {
                    handler.sendEmptyMessage(4);
                    return;
                }
                try {
                    if (!isLoggined) {
                         isLoggined = RemoteServer.login(Username, Password);
                        if (isLoggined) {
                            handler.sendEmptyMessage(2);
                            RemoteServer.enterLocalPassiveMode();
                            //FileFragment.updateFileList(RemoteServer.listNames(); - так неправильно, но работает.
                            flag = false;
                        } else {
                            handler.sendEmptyMessage(3);
                        }
                    } else {
                        RemoteServer.logout();
                        RemoteServer.disconnect();
                        handler.sendEmptyMessage(5);
                        handler.sendEmptyMessage(6);
                    }
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
        });
 
        backGroundWroker.start();
    }



Код метода получения списка файлов(ошибка тут):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Override
    public void onListUpdate() {
        if(backGroundWroker.isAlive()){
            handler.sendEmptyMessage(8);
            return;
        }
 
        if(flag){
            backGroundWroker.start();
        }
 
        else {
            backGroundWroker = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        FileFragment.updateFileList(RemoteServer.listNames();// ошибка тут (Метод listNames() - получает список фалов из корня сервера) так правильно, но выбивает ошибку.
                    }
                    catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
            backGroundWroker.start();
            flag = true;
        }
    }

...
Рейтинг: 0 / 0
24.04.2019, 15:33
    #39805805
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
Я верно понял, что в том месте из доп.потока (где ошибка) идёт прямое обращение к UI?
...
Рейтинг: 0 / 0
24.04.2019, 18:25
    #39805886
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
Предположительно... Commons-IO разрабатывался не для Андроида. А для обычной Java.
Если он не ловит эксцепшен то скорее всего этого экцепшена и правда нету. Просто есть
какое-то третье состояние. Молчаливый выход.

Есть просто мысль - скачать сорцы (ты наверное так и сделал)
http://commons.apache.org/proper/commons-io/download_io.cgi
и просто добавить в подозрительный фрагмент
побольше логгирования. Вот буквально через каждую строку добавляй чекпоинт.
Ситуацию с ошибкой можно будет видеть по меткам времени (надо чтоб
оно логгировалось с точностью до милисекунд)
...
Рейтинг: 0 / 0
24.04.2019, 23:30
    #39805927
Vladamir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
wadman, нет нет, через поток UI ничего не делается. Абсолютно все методы класса выполняются в отдельном потоке
...
Рейтинг: 0 / 0
25.04.2019, 07:59
    #39805982
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
Vladamir,

а это выполняется в потоке:
Код: java
1.
2.
FileFragment.updateFileList(RemoteServer.listNames();
// ошибка тут (Метод listNames() - получает список фалов из корня сервера) так правильно, но выбивает ошибку.


Это не обращение-ли к UI?
...
Рейтинг: 0 / 0
25.04.2019, 12:33
    #39806158
Vladamir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
wadman, нет
...
Рейтинг: 0 / 0
25.04.2019, 12:35
    #39806164
Vladamir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
wadman, выше инициализирован поток, в котором должен отработать метод
...
Рейтинг: 0 / 0
25.04.2019, 13:42
    #39806254
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Библиотека от Apache для работы с FTP на android. Ошибка
Vladamir,

FileFragment - это что? Не часть пользовательского интерфейса?
https://developer.android.com/guide/components/fragments
...
Рейтинг: 0 / 0
Форумы / Разработка под мобильные платформы [игнор отключен] [закрыт для гостей] / Библиотека от Apache для работы с FTP на android. Ошибка / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]