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

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

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

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

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

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

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

Ошибка приложения при вызове startActivity из другого класса - Программирование Android
Возникла проблема, программа валится при вызове метода enableBt() Класс со static методами: package my.bluetooth; import...

Ошибка при вызове приложения из другого приложения - Программирование Android
Сделано два простеньких приложения и я хочу чтобы одно приложение запускало другое. В приложении, которое будет запущено установлен фильтр...

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

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

6
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 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 / 18
Регистрация: 07.07.2014
Сообщений: 240
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);
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 / 18
Регистрация: 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 быть несколько заголовочных файлов? - Программирование Android
Может ли в папке jni быть несколько заголовочных файлов .h ?? И как если это надо прописать в Android.mk??

Почему приложение в Google Play может быть не доступно в некоторых странах? - Программирование
Загрузил приложение на Google Play. Но один пользователь отправил мне такую ошибку при загрузке моего приложения:"Sorry,The APP Cannot Be...

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

Может ли быть два виджета в одном проекте где у каждого будет своя активити настроек? - Программирование Android
Попытался так сделать, все везде написал и в provider и в manifest, но все равно при добавлении второго виджета вылетает активити первого...


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

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

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