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

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

Войти
Регистрация
Восстановить пароль
 
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
#1

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

22.04.2016, 17:20. Просмотров 223. Ответов 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);
        }
 
 
    }
 
}

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

Помогите, не могу понять !!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 17:20     В чем может быть ошибка при вызове сервиса?
Посмотрите здесь:
Android в чем ошибка при создание этого сервиса на андроиде?
Ошибка при вызове активити Android
Android Ошибка приложения при вызове startActivity из другого класса
Android Сколько активностей может быть
Разъясните гуру как такое может быть! Android
Может ли в папке jni быть несколько заголовочных файлов? Android
Android Ошибка в вызове нового активити в android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
22.04.2016, 17:27     В чем может быть ошибка при вызове сервиса? #2
ЛОГ ОШИБКИ ГДЕ???

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

intent = new Intent(MainActivity.this, MyService.class)
prokopov
0 / 0 / 2
Регистрация: 19.04.2015
Сообщений: 92
22.04.2016, 17:31  [ТС]     В чем может быть ошибка при вызове сервиса? #3
Паблито,
Цитата Сообщение от Паблито Посмотреть сообщение
intent = new Intent(MainActivity.this, MyService.class)
И все равно вылетает (
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
22.04.2016, 17:41     В чем может быть ошибка при вызове сервиса? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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);
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 интентом?
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
23.04.2016, 00:22     В чем может быть ошибка при вызове сервиса? #6
prokopov, я не так показывал, еще один intent сделайте, и его вместо null передавайте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2016, 01:20     В чем может быть ошибка при вызове сервиса?
Еще ссылки по теме:
Может ли быть два виджета в одном проекте где у каждого будет своя активити настроек? Android
о чем может говорить этот лог Android
Android Сокеты - краш при вызове openConnection
LinearLayout при вызове клавиатуры остается на месте Android
Android Программа вылетает при вызове метода getResourse()

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

Или воспользуйтесь поиском по форуму:
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);
Yandex
Объявления
23.04.2016, 01:20     В чем может быть ошибка при вызове сервиса?
Ответ Создать тему
Опции темы

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