我想发送一个带蓝牙的角色。当只有一个字符时,代码工作正常。但我想在两个代码之间使用延迟函数。 我想用EditText输入任何数字,应用程序将获取该数字并执行EditText / 44。这就是我想要在2个代码之间等待
最后工作..谢谢你们。 :)
我在setOnClick中移动了a,b,c;
kileri = (Button) findViewById(R.id.kileri);
final EditText value1 = (EditText) findViewById(R.id.textkont);
assert value1 != null;
value1.setText("0");
btAdapter = BluetoothAdapter.getDefaultAdapter();
checkBTState();
kileri.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int a = Integer.parseInt(value1.getText().toString());
int b = a / 44;
int c = b * 1000;
sendData("F");
try {
Thread.sleep(c);
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:3)
increment
编辑为您的代码
try {
//set time in mili
Thread.sleep(3000);
}catch (Exception e){
e.printStackTrace();
}
答案 1 :(得分:3)
您可以使用处理程序
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//do something
}
}, 2000 );//time in milisecond
答案 2 :(得分:0)
你可以这样做
kileri = (Button) findViewById(R.id.kileri);
final EditText value1 = (EditText) findViewById(R.id.textkont);
assert value1 != null;
value1.setText("0");
final int a = Integer.parseInt(value1.getText().toString());
final int b = a/22;
final int c = b/2; // It will take a int from Edittext and do this operation on that.
btAdapter = BluetoothAdapter.getDefaultAdapter();
checkBTState();
kileri.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
sendData("F");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sendData("S");
}
}, c);
}
});
答案 3 :(得分:0)
只需在点击按钮时使用runOnUiThread
,并在延迟后发布Handler
..
Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendData("F"); // send
delay(2000);
}
});
<强>更新强>
延迟()..
public void delay(final int c){
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(c);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sendData("S"); //send
}
}, c);
}
答案 4 :(得分:0)
使用这样的处理程序:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// do something after 2s = 2000 miliseconds
}
}, 2000); //Time in milisecond
答案 5 :(得分:0)
不建议使用Thread.Sleep,因为如果在主线程执行中调用它会停止执行主线程。因此,如果要设置延迟,可以使用 CountDownTimer 。
在下面的代码段中,我们给了2秒的延迟。因此,在2s onFinish()回调到来之后,我们就可以在那里进行操作了。
new CountDownTimer(2000, 1000) {
public void onFinish() {
}
public void onTick(long millisUntilFinished) {
}.start();
}