- Почему вы используете отражение для createRFCommSocket?device.getClass (). getMethod ("createRfcommSocket", new Class [] {int.class});
в отличие от
try {mBTSocket = mBTDevice.createRfcommSocketToServiceRecord(UUID_RFCOMM_GENERIC);
} catch (Exception e1) {
msg ("connect(): Failed to bind to RFCOMM by UUID. msg=" + e1.getMessage());
return false;
}
Отражение легко может бытьисточник проблем.Если нет причин использовать его, то избегайте его любой ценой.
Более того, если вызов getClass завершится неудачно, ваша переменная "m" будет нулевой, и вы не будете ловить эту ситуацию.Вы должны также обобщать свое исключение, вместо того, чтобы использовать конкретные исключения, просто используйте «Исключение», как в моем фрагменте кода выше.Это гораздо проще, чем добавить уловку для каждого возможного типа исключения, которое может быть сгенерировано.
Я не совсем понимаю, что вы делаете с обработчиками, это не имеет смысламне.Можете ли вы удалить код обработчика для упрощения вещей?
Слишком много сложностей.Уберите все отражения, дополнительные уловки.
Хорошая практика кодирования - делать ваши методы одной страницей или меньше.Когда метод больше, чем страница, он слишком сложен, и это делает его чтение И отладку очень трудным.Уменьшите размер ваших методов, создав другие методы для выполнения распространенных задач.
Отделите логику connect () от логики ввода-вывода.У вас должен быть метод для отправки данных и метод для получения данных, метод для connect ().Затем, когда все заработает, разбейте на части и создайте методы для высокоуровневого ввода-вывода для отправки и получения целых блоков данных.затем совершенствуйте эти методы и продолжайте расти.
в моем коде методы read, write, connect и ALL I / O занимают всего 1-20 строк каждый.Сделайте их очень простыми, потому что логика ввода-вывода лежит в основе вашего приложения, и она должна быть чистой, чистой, чистой.