Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
#1

В чем может быть ошибка при вызове сервиса? - Программирование Android

22.04.2016, 17:20. Просмотров 345. Ответов 6

В чем может быть проблема при вызове сервиса?

Изучаю service, и возник вопрос по-поводу, передачи данных между сервисом и активити. Нашел этот урок, и сделал все как в нем описано. Но при вызове сервиса - выбрасывает просто с программы, при этом в логах не пишет никаких exeption или ошибок. Просто такой диалог , и закрывается программа:

Вот мой код:

активити:

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
97
98
99
100
101
102
103
104
105
106
107
108
public class MainActivity extends AppCompatActivity {
 
    private final int TASK1_CODE = 1;
    private final int TASK2_CODE = 2;
    private final int TASK3_CODE = 3;
 
    public final static int STATUS_START = 100;
    public final static int STATUS_FINISH = 200;
 
    public static final String PARAM_TIME = "TIME";
    public static final String PARAM_PINTENT = "PINTENT";
    public static final String PARAM_RESULT = "RESULT";
 
    private TextView textTask1, textTask2, textTask3;
    private Button startService;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textTask1 = (TextView) findViewById(R.id.task1);
        textTask1.setText("task 1 ");
 
        textTask2 = (TextView) findViewById(R.id.task2);
        textTask2.setText("task 2");
 
        textTask3 = (TextView) findViewById(R.id.task3);
        textTask3.setText("task 3");
 
        startService = (Button) findViewById(R.id.startButton);
        startService.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickStart();
            }
        });
 
 
    }
 
 
    private void onClickStart(){
        PendingIntent pi;
        Intent intent;
 
        pi = createPendingResult(TASK1_CODE, null, 0);
        intent = new Intent(getApplicationContext(), MyService.class)
                .putExtra(PARAM_TIME, 7)
                .putExtra(PARAM_PINTENT, pi);
        startService(intent);
 
        pi = createPendingResult(TASK2_CODE, null, 0);
        intent = new Intent(getApplicationContext(), MyService.class)
                .putExtra(PARAM_TIME, 4)
                .putExtra(PARAM_PINTENT, pi);
        startService(intent);
 
        pi = createPendingResult(TASK3_CODE, null, 0);
        intent = new Intent(getApplicationContext(), MyService.class)
                .putExtra(PARAM_TIME, 6)
                .putExtra(PARAM_PINTENT, pi);
        startService(intent);
 
    }
 
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == STATUS_START){
            switch (requestCode){
                case TASK1_CODE:{
                    textTask1.setText("task 1 start");
                    break;
                }
                case TASK2_CODE:{
                    textTask2.setText("task 2 start");
                    break;
                }
                case TASK3_CODE:{
                    textTask3.setText("task 3 start");
                    break;
                }
            }
        }
        if (resultCode == STATUS_FINISH){
            int result = data.getIntExtra(PARAM_RESULT, 0);
            switch (requestCode){
                case TASK1_CODE:{
                    textTask1.setText("task 1 finish, result = " + result );
                    break;
                }
                case TASK2_CODE:{
                    textTask2.setText("task 2 finish, result = " + result);
                    break;
                }
                case TASK3_CODE:{
                    textTask3.setText("task 3 finish , result = " + result);
                    break;
                }
            }
        }
 
    }
 
 
}

и сервис:

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
public class MyService extends Service {
 
    private final String LOG = "MYSERVICELOG";
    private ExecutorService executorService;
 
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(LOG, "onCreate");
        executorService = Executors.newFixedThreadPool(2);
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(LOG, "onDestroy");
    }
 
 
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG, "onStartCommand");
        int time = intent.getIntExtra(MainActivity.PARAM_TIME, 1);
        PendingIntent pi = intent.getParcelableExtra(MainActivity.PARAM_PINTENT);
 
        MyRun myRun = new MyRun(time, startId, pi);
        executorService.execute(myRun);
 
        return super.onStartCommand(intent, flags, startId);
 
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
 
    class MyRun implements Runnable{
 
        private int time, startId;
        private PendingIntent pendingIntent;
 
        public MyRun(int time, int startId, PendingIntent pendingIntent){
            this.time = time;
            this.startId = startId;
            this.pendingIntent = pendingIntent;
            Log.d(LOG, "MyRun# " + startId + " created");
        }
 
 
        @Override
        public void run() {
            Log.d(LOG, "MyRun# " + startId + " time: " + time + " start");
            try {
                pendingIntent.send(MainActivity.STATUS_START);
 
                 TimeUnit.SECONDS.sleep(time);
                Intent intent = new Intent()
                        .putExtra(MainActivity.PARAM_RESULT, time *100);
                pendingIntent.send(MyService.this, MainActivity.STATUS_FINISH, intent);
 
            }catch (PendingIntent.CanceledException ce){
                ce.getStackTrace();
            }catch (InterruptedException ie){
                ie.getStackTrace();
            }
            stop();
 
        }
 
        private void stop(){
            Log.d(LOG, "MyService# " + startId + " stoped" );
            stopSelfResult(startId);
        }
 
 
    }
 
}

В чем может быть проблема ??

Помогите, не могу понять !!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 17:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чем может быть ошибка при вызове сервиса? (Программирование Android):

в чем ошибка при создание этого сервиса на андроиде?
всем привет! хотел повторить этот пример создания сервиса...

Ошибка при запуске внешнего сервиса
Доброго времени суток! Делаю в Qt приложение под андроид. Сейчас решил...

Ошибка при вызове активити
Всем доброго времени суток. Столкнулся вот с такой проблемой, не могу вызвать...

Ошибка приложения при вызове startActivity из другого класса
Возникла проблема, программа валится при вызове метода enableBt() Класс со...

Ошибка при вызове приложения из другого приложения
Сделано два простеньких приложения и я хочу чтобы одно приложение запускало...

Сколько активностей может быть
Ребята я писал приложения, но использовал по минимуму активностей, тупо было...

6
Pablito
2655 / 2137 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
22.04.2016, 17:27 #2
ЛОГ ОШИБКИ ГДЕ???

Добавлено через 1 минуту
Java
1
intent = new Intent(getApplicationContext(), MyService.class)

intent = new Intent(MainActivity.this, MyService.class)
0
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
22.04.2016, 17:31  [ТС] #3
Паблито,
Цитата Сообщение от Паблито Посмотреть сообщение
intent = new Intent(MainActivity.this, MyService.class)
И все равно вылетает (
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
22.04.2016, 17:41 #4
Лучший ответ Сообщение было отмечено prokopov как решение

Решение

Java
1
pi = createPendingResult(TASK1_CODE, null, 0);
Что за бред? Вторым аргументом должен быть intent, попробуйте:
Java
1
2
Intent intent2 = new Intent(this, MyService.class);
pi = createPendingResult(TASK1_CODE, intent2, 0);
1
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
22.04.2016, 23:22  [ТС] #5
DarkVortex,

если я делаю так:
Java
1
2
3
4
5
6
pi = createPendingResult(TASK1_CODE, null, 0);
intent = new Intent(MainActivity.this, MyService.class)
                .putExtra(PARAM_TIME, 7)
                .putExtra(PARAM_PINTENT, pi);
 
 startService(intent);
Изменю на:

Java
1
2
3
4
intent = new Intent(MainActivity.this, MyService.class)
                .putExtra(PARAM_TIME, 7)
                .putExtra(PARAM_PINTENT, pi);
pi = createPendingResult(TASK1_CODE, intent, 0);
Как тогда запустить сервис и передать в него "pi" c интентом?
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
23.04.2016, 00:22 #6
prokopov, я не так показывал, еще один intent сделайте, и его вместо null передавайте
0
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
23.04.2016, 01:20  [ТС] #7
DarkVortex,
Цитата Сообщение от DarkVortex Посмотреть сообщение
я не так показывал, еще один intent сделайте
Спасибо, немного невнимательно прочел ответ!

Сделал так - все заработало :

Java
1
  pi = createPendingResult(TASK1_CODE, new Intent(), 0);
0
23.04.2016, 01:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2016, 01:20
Привет! Вот еще темы с решениями:

Разъясните гуру как такое может быть!
Купил Навигатор с регистратором. На андроиде. Но андроид какой-то...

Может ли в папке jni быть несколько заголовочных файлов?
Может ли в папке jni быть несколько заголовочных файлов .h ?? И как если это...

Почему приложение в Google Play может быть не доступно в некоторых странах?
Загрузил приложение на Google Play. Но один пользователь отправил мне такую...

Ошибка в вызове нового активити в android
Казалось бы, что может быть проще, но ни как не могу осуществить эту функцию в...


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

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

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