有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android Studio中使用延迟函数?

我想用蓝牙发送一个字符。当只有一个字符时,代码可以完美地工作。但是我想在两个代码之间使用一个延迟函数。 我想用EditText输入任何数字,应用程序将获取该数字并执行EditText/44。这就是我想在两个代码之间等待的

终于开始工作了。。谢谢大家。:)

我在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();
            }

共 (6) 个答案

  1. # 1 楼答案

    你可以使用handler

    new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    //do something
                }
            }, 2000 );//time in milisecond
    
  2. # 2 楼答案

    只需在按钮上使用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);
    
    }
    
  3. # 3 楼答案

    你可以这样做

    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);    
        }
    });
    
  4. # 4 楼答案

     try {
           //set time in mili
            Thread.sleep(3000);
    
        }catch (Exception e){
            e.printStackTrace();
        }
    

    编辑为您的代码

     kileri.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                sendData("F");
                try {
                    //set time in mili
                    Thread.sleep(3000);
    
                }catch (Exception e){
                    e.printStackTrace();
                }
                sendData("S");
            }
        });
    
  5. # 5 楼答案

    不建议使用线程。睡眠,因为如果在主线程执行中调用它,它会停止主线程的执行。所以,如果我们想设置延迟,我们可以使用倒计时

    在下面的片段中,我们给出了2秒的延迟。所以,在2s onFinish()回调到来之后,我们可以在那里进行操作

    new CountDownTimer(2000, 1000) {
         public void onFinish() {
             
         }
    
     public void onTick(long millisUntilFinished) {
              
     }.start();
    } 
    
  6. # 6 楼答案

    使用如下处理程序:

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // do something after 2s = 2000 miliseconds
            }
        }, 2000); //Time in milisecond