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

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

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

Вылетает при создании потока - Программирование Android

15.02.2016, 13:04. Просмотров 261. Ответов 11
Метки нет (Все метки)

При выключенном Bluetooth, запуская приложение у меня включается блютуз, но выдаёт ошибку создания потока:
XML
1
2
3
02-15 13:31:26.111 30855-31205/com.alexru18.bluetoothchat E/AndroidRuntime: FATAL EXCEPTION: Thread-2439
                                                                            java.lang.NullPointerException
                                                                                at com.alexru18.bluetoothchat.ServerThread.run(ServerThread.java:36)
Думал дело в том, что блютуз запускается не сразу, а через несколько мгновений и поставил delay, но не помогло:
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
public void run() {
 
        BluetoothSocket socket = null;
 
        Log.d("ServerThread", "Started");
 
        while (true) {
            try {
                socket = bluetoothServerSocket.accept();  //(ServerThread.java:36)
            } catch (IOException e) {
                Log.d("ServerThread", "Stop: " + e.getLocalizedMessage());
                break;
            }
            try {
                sleep(5000);
                if (socket != null) {
                    communicatorService.createCommunicatorThread(socket).startCommunication();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
        }
    }
В чём может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 13:04     Вылетает при создании потока
Посмотрите здесь:

Вылетает при прокрутке - Программирование Android
Доброе утро. Тут небольшая проблема возникла. У меня в ListView формируется список категорий, их порядка 1000 а может и больше,...

SmsManager вылетает при отправке СМС - Программирование Android
SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(strNumberGSM, null, "?", null, null); ...

Приложение вылетает при старте на 4.1, на 4.4 - работает - Программирование Android
Здравствуйте, Я написал приложение для android в eclipse 4.4.2. На телефоне с android 4.4.2 приложение отлично работает. На телефоне...

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

Программа вылетает при переходе на ListActivity - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Моя программа просто вылетает при переходе на ListActivity. Ниже есть...

Программа вылетает при прокрутке ListActivity - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Моя программа вылетает при прокрутке ListActivity вниз... Как это...

При повороте на 90 градусов вылетает программа - Программирование Android
Поворачиваю телефон на 90 градусов и программа сворачивается... Другие программы при повороте поворачиваются на 90 градусов, как и должно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
15.02.2016, 13:20     Вылетает при создании потока #2
наверное стоило показать больше кода что бы было понятно как, где и после чего инициализируется bluetoothServerSocket
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
15.02.2016, 20:24  [ТС]     Вылетает при создании потока #3
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
import java.io.IOException;
import java.util.UUID;
 
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.util.Log;
 
public class ServerThread extends Thread {
 
    private final BluetoothServerSocket bluetoothServerSocket;
    private final CommunicatorService communicatorService;
 
    public ServerThread(CommunicatorService communicatorService) {
        this.communicatorService = communicatorService;
        final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        BluetoothServerSocket tmp = null;
        try {
            tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord("BluetoothApp", UUID.fromString(MainActivity.UUID));
        } catch (IOException e) {
            Log.d("ServerThread", e.getLocalizedMessage());
        }
        bluetoothServerSocket = tmp;
    }
 
    public void run() {
 
        BluetoothSocket socket = null;
 
        Log.d("ServerThread", "Started");
 
        while (true) {
            try {
                socket = bluetoothServerSocket.accept();
            } catch (IOException e) {
                Log.d("ServerThread", "Stop: " + e.getLocalizedMessage());
                break;
            }
            try {
                sleep(5000);
                if (socket != null) {
                    communicatorService.createCommunicatorThread(socket).startCommunication();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
        }
    }
 
    public void cancel() {
        try {
            bluetoothServerSocket.close();
        } catch (IOException e) {
            Log.d("ServerThread", e.getLocalizedMessage());
        }
    }
}
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
15.02.2016, 23:56     Вылетает при создании потока #4
Не ужели так трудно пробежаться отладчиком по коду, при этом смотря в окно переменных. После первого прохода все сразу станет ясно. Практика со sleep плохая. Попробуйте посмотреть если ли какая нибудь функция которая возвращает состояние блютуса, если есть то по этой переменный и ориентируйтесь.
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
16.02.2016, 00:08  [ТС]     Вылетает при создании потока #5
Я начинающий в этом деле, не могли бы вы уточнить где я могу увидеть отладчик и окно переменных? Такой функции нет
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
16.02.2016, 11:50     Вылетает при создании потока #6
Java
1
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
после этой строчки вывести в лог и посмотреть чему равна переменная bluetoothAdapter
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
16.02.2016, 18:28  [ТС]     Вылетает при создании потока #7
XML
1
2
3
4
5
6
7
8
9
10
11
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat E/Trace: error opening trace file: No such file or directory (2)
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapUtilization:0.25
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapIdealFree:8388608
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapConcurrentStart:2097152
02-16 19:28:05.971 11170-11170/com.alexru18.bluetoothchat D/ServerThread: bluetoothAdapter =android.bluetooth.BluetoothAdapter@41569c30
02-16 19:28:05.981 11170-11170/com.alexru18.bluetoothchat D/ServerThread: Not able to register SDP record for BluetoothApp
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat D/ServerThread: Started
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat W/dalvikvm: threadid=11: thread exiting with uncaught exception (group=0x41141300)
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat E/AndroidRuntime: FATAL EXCEPTION: Thread-4581
                                                                            java.lang.NullPointerException
                                                                                at com.alexru18.bluetoothchat.ServerThread.run(ServerThread.java:38)
И дальше креш. И ещё забыл дописать что когда перед включением приложения блютуз активен, то всё проходит нормально
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
16.02.2016, 19:00     Вылетает при создании потока #8
ну тогда наверное надо проверять включен блютуз или нет ДО того как запускается ServerThread
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
16.02.2016, 19:17  [ТС]     Вылетает при создании потока #9
Именно. В самом самом начале кода, в onStart() я запускаю mBluetoothAdapter.enable() и всё должно быть пучком, не так-ли?
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
16.02.2016, 19:21     Вылетает при создании потока #10
Разрешения в манифесте прописаны?
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
16.02.2016, 19:37  [ТС]     Вылетает при создании потока #11
Конечно.

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 19:38     Вылетает при создании потока
Еще ссылки по теме:

Вылетает приложение при возникновении ошибки - Программирование Android
Доброго всем времени суток! Вот есть приложение по работе с MySQL. Тему эту мы разобрали, и вроде все прекрасно. Одно маленькое &quot;но&quot; ...

Вылетает приложении при загрузке шрифта - Программирование Android
Хочу присвоить тексту свой шрифт, например, кладу в assets/fonts/f300.ttf далее код textView1 = (TextView)...

Программа вылетает при запуске. OutOfMemryError - Программирование Android
Здравствуйте, уважаемые разработчики! Моя программа вылетает сразу при запуске. Вот код ошибки: ava.lang.OutOfMemoryError: Failed to...

Вылетает приложение при нажатии на кнопку - Программирование Android
Здравствуйте, столкнулся с проблемой, что при нажатии на кнопку приложение вылетает. Программирую в Android Studio, кто нибудь сталкивался...

Вылетает приложение при чтении файла - Программирование Android
Доброго времени суток))) Помогите решить проблему Имеется код:package ru.myscanner.scannerth; import java.io.FileInputStream; ...


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

Или воспользуйтесь поиском по форуму:
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
16.02.2016, 19:38     Вылетает при создании потока #12
лично я бы создал BroadcastReceiver который реагировал бы на вкл/выкл блютуза, а уже из того ресивера либо интентами через активити либо еще как-то включал-останавливал поток который слушает сокет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    private final BroadcastReceiver btWatcher = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
                int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
                switch (state) {
                    case BluetoothAdapter.STATE_OFF:
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        break;
                    case BluetoothAdapter.STATE_ON:
                        break;
                    case BluetoothAdapter.STATE_TURNING_ON:
                        break;
                }
            }
        }
    };
Yandex
Объявления
16.02.2016, 19:38     Вылетает при создании потока
Ответ Создать тему
Опции темы

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