Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

Как можно в progressBar вернуть прогресс нужного потока? - Android

24.03.2014, 19:30. Просмотров 667. Ответов 4
Метки нет (Все метки)

На разных фрагментах(экранах) начинаю скачку файла и именно на лаяуте располагается progressBar, при переходе с экрана на экран progressBar теряет свой прогресс и не виден ход загрузки файла. Одновременно можно качать файлы на разных экранах. Как можно в progressBar вернуть прогресс нужного потока, ведь в фоне они работают?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 19:30     Как можно в progressBar вернуть прогресс нужного потока?
Посмотрите здесь:

Android Как сделать простой progressbar?
Android Как получить значение String из UI потока в потоке AsyncTask?
Как забрать данные из отработавшего потока? Android
Как повесить прогресс диалог секунд на 10? Android
Прогресс бар в кнопку Android
Android UiThread, как вынести процесс из главного потока?
Android Как после удаления view компонентов (removeAllViews) вернуть их?
Как открыть url для авторизации в браузере и после вернуть токен в приложение? Android
Android Как не допустить создание потока еще раз?
Как вернуть результат в активити включил юзер gps или нет? Android
Кастомизация прогресс-бара Android
Обновление ProgressBar из основного потока Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.03.2014, 19:32     Как можно в progressBar вернуть прогресс нужного потока? #2
добавить коллбек который сообщал бы текущий прогресс и подписывать текущий фрагмент на него.
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
24.03.2014, 19:37  [ТС]     Как можно в progressBar вернуть прогресс нужного потока? #3
NiRamz, Я был бы очень благодарен примером кода.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.03.2014, 19:47     Как можно в progressBar вернуть прогресс нужного потока? #4
как реализована работа в фоне?
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
25.03.2014, 18:53  [ТС]     Как можно в progressBar вернуть прогресс нужного потока? #5
Java
1
2
DownloadTask downloadTask = new DownloadTask(getActivity())
downloadTask.execute("link.rar");
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 // Download class
    private class DownloadTask extends AsyncTask<String, Integer, String> {
 
 
        private Activity context;
        private PowerManager.WakeLock mWakeLock;
 
        public DownloadTask(Activity context) {
        this.context = context;
        }
 
        @Override
        protected String doInBackground(String... sUrl) {
            InputStream input = null;
            OutputStream output = null;
            HttpURLConnection connection = null;
            try {
                URL url = new URL(sUrl[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();
 
                // expect HTTP 200 OK, so we don't mistakenly save error report
                // instead of the file
                if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                    return "Server returned HTTP " + connection.getResponseCode()
                            + " " + connection.getResponseMessage();
                }
 
                // this will be useful to display download percentage
                // might be -1: server did not report the length
                int fileLength = connection.getContentLength();
 
                // download the file
                input = connection.getInputStream();
                output = new FileOutputStream("/sdcard/file_name.extension");
 
                byte data[] = new byte[4096];
                long total = 0;
                int count;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    // publishing the progress....
                    if (fileLength > 0) // only if total length is known
                        publishProgress((int) (total * 100 / fileLength));
                    output.write(data, 0, count);
                }
            } catch (Exception e) {
                return e.toString();
            } finally {
                try {
                    if (output != null)
                        output.close();
                    if (input != null)
                        input.close();
                } catch (IOException ignored) {
                }
 
                if (connection != null)
                    connection.disconnect();
            }
           return null;
        }
 
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Take CPU lock to prevent CPU from going off if the user presses the power button during download
            PowerManager pm = (PowerManager) context.getSystemService(getActivity().POWER_SERVICE);
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    getClass().getName());
            mWakeLock.acquire();
        }
 
        @Override
        protected void onProgressUpdate(Integer... progress) {
            super.onProgressUpdate(progress);
 
            // if we get here, length is known, now set indeterminate to false
            progressBar.setIndeterminate(false);
            progressBar.setMax(100);
            progressBar.setProgress(progress[0]);
 
//            System.out.println(progress[0]);
        }
 
        @Override
        protected void onPostExecute(String result) {
            mWakeLock.release();
            if (result != null)
                Toast.makeText(context,"Download error: "+result, Toast.LENGTH_LONG).show();
            else
                Toast.makeText(context,"File downloaded", Toast.LENGTH_SHORT).show();
        }
 
    }
Добавлено через 22 часа 21 минуту
NiRamz, может вы сможете подсказать что-нибудь по этому поводу?
Yandex
Объявления
25.03.2014, 18:53     Как можно в progressBar вернуть прогресс нужного потока?
Ответ Создать тему
Опции темы

Текущее время: 05:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru