С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
#1

Ошибка потока в сервисе - Программирование Android

16.12.2013, 15:33. Просмотров 596. Ответов 9
Метки нет (Все метки)

Создаю сервис, он должен выполнять парсинг сайта, загрузку звука с сайта, сохранение этого звука на флешку и воспроизведение. Написал код который все это выполняет в Активити. Но нужно чтобы это все делалось в фоне. Для этого решил использовать сервис. Чтобы не грузило основной поток приложения, которое запускает сервис, решил все эти задачи поместить в отдельный поток в сервисе. Но не работает.
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
public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "onStartCommand");
        someTask(); // в этой функции вся реализация 
        return super.onStartCommand(intent, flags, startId);
      }
 
 
 void someTask() {
            new Thread(new Runnable() { // вот создаю поток
              public void run() {
                  
                  try {
                      
                
                      
                      
                      
                      
                      // Делаю парсинг сайта( беру значение одного тега)
                      Document doc = Jsoup.connect("url_site").get();
                      Elements bids=doc.getElementsByTag("tag");
 
                        // загружаю звуковой файл в файл на флешке
                  
                         URL url = new URL(" site ");
                          URLConnection conexion = url.openConnection();
                          conexion.connect();
 
      InputStream input = new BufferedInputStream(url.openStream());
      OutputStream output = new FileOutputStream(sdFile); // здесь sdFile указывает на файл флешки
 
                          
 
                          while ((c = input.read(buffer)) != -1) {
                              output.write(buffer, 0, c);
                          }
 
                          output.flush();
                          output.close();
                          input.close();    
                      
                        } 
                                     
                     catch (IOException e)
                     {
                         
                         e.printStackTrace();
                     }
                        
                    try {TimeUnit.SECONDS.sleep(1);
                    }
                    catch (InterruptedException e){}
                
                
    
                
             
                                  }
            }).start();
          }
В чем проблема ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 15:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка потока в сервисе (Программирование Android):

Буферизация форм в сервисе - Программирование Android
Гуру помогите! Пишу корпоративную звонилку под одну фирму. Но она СЛИШКОМ большая и ОЧЕНЬ долго грузится(6 закладок и 5 списков и это...

Отзывы о сервисе geekbrains (ru) - Программирование Android
Доброго времени суток! Подскажите кто-то что-то слышал о сервисе geekbrains? Сомнительный сервис как то связан со школой программирования...

Реакция активити на событие в сервисе - Программирование Android
Здравствуйте. Есть следующая задача, решение которой мне найти не удалось (а может гуглил плохо): Предположим есть некая активити, на...

Как запустить метод в сервисе, в определённое время? - Программирование Android
Как запускать метод в сервисе, с понедельника по пятницу в определённое время? Подскажите пожалуйста кто знает куда смотреть?

Как отменить выполнение кода в сервисе, который запущен в отдельном потоке? - Программирование Android
Здравствуйте! Есть код класса, наследующего Service public int onStartCommand(Intent intent, int flags, int startId) { tTask = new...

Запуск потока в сервисе - Delphi FireMonkey
Пишу приложение. Среда 10 Seattle. В основном приложении запускаю сервис procedure TForm2.FormCreate(Sender: TObject); begin ...

9
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
16.12.2013, 16:18 #2
В чем конкретно проблема? А в основном потоке работало ? Если крэшится приложение, то приложи стектрейс.
0
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
16.12.2013, 16:27  [ТС] #3
Цитата Сообщение от angryrobot Посмотреть сообщение
В чем конкретно проблема? А в основном потоке работало ? Если крэшится приложение, то приложи стектрейс.
Визуально то хоть все правильно сделано? Можно в потоке создавать разные обьекты, что делается с этими обьектами после выполнения потока? Я так понимаю поток закрывается и обьекты удаляються. У меня почему-то AVD очень долго запускается, поэтому отладку сложно произвести. Я оставлял у блоке try , это в функции run потока, только первые две строчки
Java
1
2
 Document doc = Jsoup.connect("site").get();
 Elements bids=doc.getElementsByTag("bid");
все остальное закоментировал. Ошыбка осталась. Запускал приложение непосредственно на смартфоне.
Только запускаю сервис из приложения сразу вылетает ошыбка. Неужели обьект doc нельзя создавать в потоке? может к потоку нада подключить какой то интерфейс?
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
16.12.2013, 16:33 #4
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Визуально то хоть все правильно сделано?
Возможно, не могу точно сказать

Цитата Сообщение от ASDFD12 Посмотреть сообщение
Можно в потоке создавать разные объекты, что делается с этими объектами после выполнения потока?
Можно создавать объекты в любом потоке, и уничтожаться они будут точно так же вне зависимости от того в каком потоке их создали. Как только пропала последняя сильная ссылка на объект - он будет вскоре уничтожен.

Цитата Сообщение от ASDFD12 Посмотреть сообщение
Ошыбка осталась
Показывай ошибку, я же не Ванга чтоб гадать
0
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
16.12.2013, 16:39  [ТС] #5
как мне узнать ошибку, если AVD не запускается и в отладке я новичек, а при компиляции все ОК.
0
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 586
16.12.2013, 17:14 #6
В эклипсе, есть LogCat, там "все ходы записаны".
0
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
16.12.2013, 17:24  [ТС] #7
Цитата Сообщение от Vladimirys Посмотреть сообщение
В эклипсе, есть LogCat, там "все ходы записаны".
Но если виртуальное устройство не запускается я logcat не посмотрю, может можно посмотреть логи на реальном смартфоне?
0
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 586
16.12.2013, 17:29 #8
Так запустите устройство, его можно просто так запустить, без всяких программ. Выбираем эмулятор в AVD и жмём start
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 524
16.12.2013, 20:56 #9
CatLog есть на плеймаркете, ставьте и смотрите логи.
0
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
16.12.2013, 23:25  [ТС] #10
Был какой то глюк в Eclipse. Переустановил плагин ADT? обновил свойства проекта и все заработало.))) Всем спасибо.
0
16.12.2013, 23:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 23:25
Привет! Вот еще темы с ответами:

В сервисе не видна переменная из потока - C#
Есть сервис в котором при старте создается поток который проверяет налечее в папке файлов и при наличии должен выполнять некие действия. ...

Ошибка приостановления потока - C#
Везде юзаю такую конструкцию if(_thread != null) _thread.Suspend(); При этом если поток до этого не был запущен, то выкидывает...

1C 8.x Ошибка формата потока - 1С
Здравствуйте, после обновления базы, на след. день перестала запускаться база 1С Бухгалтерия Базовая (52) на 19ой платформе с ошибкой...

Ошибка формата потока - 1С
Стоит 1с версии 8.3 на нескольких машинах, база находится на сервере. С одной машины при попытке подключится к базе выдает ошибку "Ошибка...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.