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

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

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

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

15.02.2016, 13:04. Просмотров 242. Ответов 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
Вылетает приложение при чтении файла Android
При повороте на 90 градусов вылетает программа Android
Android Вылетает приложении при загрузке шрифта
Android SmsManager вылетает при отправке СМС
Вылетает приложение при обращении к серверу Android
Приложение вылетает при старте на 4.1, на 4.4 - работает Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,431
Завершенные тесты: 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
Я начинающий в этом деле, не могли бы вы уточнить где я могу увидеть отладчик и окно переменных? Такой функции нет
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,431
Завершенные тесты: 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)
И дальше креш. И ещё забыл дописать что когда перед включением приложения блютуз активен, то всё проходит нормально
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,431
Завершенные тесты: 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     Вылетает при создании потока
Еще ссылки по теме:

Программа вылетает при переходе на ListActivity Android
Android Программа вылетает при прокрутке ListActivity
Android Вылетает приложение при запуске
Android Программа вылетает при запуске. OutOfMemryError
Android Вылетает при прокрутке

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

Или воспользуйтесь поиском по форуму:
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,431
Завершенные тесты: 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     Вылетает при создании потока
Ответ Создать тему
Опции темы

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