powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Разработка под мобильные платформы [игнор отключен] [закрыт для гостей] / Библиотека от Apache для работы с FTP на android. Ошибка
8 сообщений из 8, страница 1 из 1
Библиотека от Apache для работы с FTP на android. Ошибка
    #39805742
Vladamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приложение использует библиотеку 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
Библиотека от Apache для работы с FTP на android. Ошибка
    #39805805
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я верно понял, что в том месте из доп.потока (где ошибка) идёт прямое обращение к UI?
...
Рейтинг: 0 / 0
Библиотека от Apache для работы с FTP на android. Ошибка
    #39805886
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположительно... Commons-IO разрабатывался не для Андроида. А для обычной Java.
Если он не ловит эксцепшен то скорее всего этого экцепшена и правда нету. Просто есть
какое-то третье состояние. Молчаливый выход.

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

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


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

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


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