@prizrak39

Как правильно передать ответ в UI после загрузки файла?

Необходимо было реализовать загрузку файла пользователя на сервер. Реализовал это с помощью сокетов в отдельном потоке. Но так как метод run() не возвращает никакого значения, то есть я не могу уведомить пользователя об результате загрузки. Возможно я не правильно понял применение библиотеки RxJava, но мне не совсем понятно как для решения данной задачи ее применить. Единственный вариант решения, который я нашел это AsyncTask.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Вообще, загрузка файла это длительная операция, и лучше бы исправить для такого WorkManager(https://developer.android.com/topic/libraries/arch...

Но если упёрлось сделать на Rx, а стабильность не так важна, смотри на observeOn/subscribeOn. Переключение потоков делается с их помощью.

В сторону АсинкТасок даже не смотри, они вообще не для этого. Какой-то стажёр в гугле их придумал для "удобства", вот и тащат до сих пор.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@prizrak39 Автор вопроса
Примерно так должна выглядеть реализация через Rx?

String pathFile = "C:\1.txt"; 
        Observable<String> myObservable = Observable.create(
            new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> sub) {
                sub.onNext(pathFile);
                sub.onCompleted();
            }
        });
        
        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) { 
                // Upload file
            }

            @Override
            public void onCompleted() { }

            @Override
            public void onError(Throwable e) { }
        };
    
        myObservable.subscribe(mySubscriber);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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