0
私はインターネットを介して家電機器やユーティリティを制御できるIoTプロジェクトを作成しています。下のコードでは、スイッチが有効になっているときにカーテンを開きます。私がここでやりたいことは、カーテンが全開になるまでボタンを無効にすることです。カーテンが全開になるまで5秒かかるので、ボタンが完全に開くまでボタンを押してカーテンを閉じることができません。サーボモーター)。私はこれを達成するために以下のコードを書いた。 Timerクラスを使用します。しかし、スイッチをまったく無効にするわけではありません。どんな助けもありがとう。ありがとう!タイマーが一定時間のボタン無効化機能を実行しない
curtain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.equals("open")) {
Toast.makeText(getApplicationContext(), "Curtain is opening..", Toast.LENGTH_LONG).show();
final long period = 5000;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
curtain.setEnabled(false);
}
}, System.currentTimeMillis(), period);
curtain.setEnabled(true);
} else {
Toast.makeText(getApplicationContext(), "Failed to open", Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Connection failed. Please check your internet connection.", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> getData = new HashMap<>();
getData.put("device", "curtain");
getData.put("action", "open");
return getData;
}
};
IotSingleton.getInstance(MainActivity.this).addToRequestQue(stringRequest);
}
解決に感謝します。それは魅力のように働く。上記のコードで、学習のために私が間違っていたことを説明できますか? –
@SahadNkこちらのドキュメントをお読みください:https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#schedule(java.util.TimerTask,%20long,%20long) –