我正在尝试直接从 mysql db 更改按钮的状态。状态是:
1. 启用
2. 禁用。
我有一个Asynctask
执行一些查询并给出一些结果,如 true 或 false 如果它给出 true 然后启用按钮,否则禁用。
如果手动更改数据库中的某个值,我希望按钮自动更改状态什么是最好的或任何方法来做到这一点。
谢谢
我正在尝试直接从 mysql db 更改按钮的状态。状态是:
1. 启用
2. 禁用。
我有一个Asynctask
执行一些查询并给出一些结果,如 true 或 false 如果它给出 true 然后启用按钮,否则禁用。
如果手动更改数据库中的某个值,我希望按钮自动更改状态什么是最好的或任何方法来做到这一点。
谢谢
我认为循环监听变化的线程是最好的解决方案。然而,使用 AsyncTask 并不是完成此任务的首选方式,因为按照设计,AsyncTask 应该只用于短期运行的操作。使用工作线程,将处理程序传递给 UI 线程到您的工作线程,并通过此处理程序更新按钮。
public class MyThread extends Thread{
private final long WAITING_TIME = 5000;
private Handler handler;
private boolean current_state = false;
MyThread(Handler handler){
this.handler = handler;
}
run(){
new_state = // retrieve from database;
if(new_state != current_state){
handler.send(new Message().setData(new Bundle().putBoolean("STATE",new_state)));
current_state = new_state;
}
this.wait(WAITING_TIME);
}
}
在您的活动中,您解析到达的消息并进行必要的更改(如果这是与处理程序通信的唯一线程,您实际上不需要解析消息,因为您知道每条新消息都意味着按钮状态的更改)。因此,例如在您的 onCreate() 回调中:
handler = new Handler(){
public void handleMessage(Message message){
if(message.getBundle().getBoolean("STATE"))
//activate button
else
//deactivate button
}
}
new MyThread(handler).start();
另一种解决方案是在您的应用程序中使用响应式代理来等待来自数据库的通知。但这不是一个好的设计,因为它会将您的应用程序和后端都变成退化的服务器。