Я хочу вызвать метод sendDate
при нажатии кнопки. Но, к сожалению, я получаю бесконечный цикл, и мое приложение замерзает. Может быть, я могу попробовать его с обработчиком, но я не уверен.Повторно вызовите метод при нажатии кнопки
controllerButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
if (liftStatus == LIFT_IS_UP) {
sendData(3);
} else if (liftStatus == LIFT_IS_DOWN) {
sendData(1);
}
}
if (liftStatus == LIFT_IS_UP) {
sendData(4);
return true;
} else if (liftStatus == LIFT_IS_DOWN) {
sendData(2);
return true;
}
return false;
}
}
};
SendData Метод
Метод является контроль лифта, который через Bluetooth LE подключен
private void sendData(int command){
if (myBluetoothGattCharacteristic != null) {
switch(command) {
case 1:
myBluetoothGattCharacteristic.setValue("Lift_UP_START");
break;
case 2:
myBluetoothGattCharacteristic.setValue("Lift_UP_STOP");
break;
case 3:
myBluetoothGattCharacteristic.setValue("Lift_DOWN_START");
break;
case 4:
myBluetoothGattCharacteristic.setValue("Lift_DOWN_STOP");
break;
default:
return;
}
myGatter.writeCharacteristic(myBluetoothGattCharacteristic);
}
}
Вы можете попробовать использовать 'onClickListener' вместо 'onTouchListener'. Это обычный прослушиватель для нажатия кнопки. – Marcel50506
@ Marcel50506 как бы решить эту проблему? – Dominic
Во-первых, не делайте трудоемких действий в потоке пользовательского интерфейса. Запустите его в отдельном потоке. Во-вторых, исследуйте бесконечный цикл. Даже вне основного потока это не должно происходить. – mhenryk