我正在尝试直接从mysql db更改按钮的状态。
国家是:
1.启用
2.禁用。
我有Asynctask
执行一些查询并给出一些像true或false的结果
如果它给出了true,则启用按钮,否则禁用。
如果某个人手动更改数据库值,我希望按钮自动更改状态 什么是最好的或任何方法来做到这一点。
由于
答案 0 :(得分:1)
我认为循环监听变化的线程是最好的解决方案。然而,使用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);
}
}
在您的Activity中,您解析到达的消息并进行必要的更改(如果这是与处理程序通信的唯一线程,您实际上不需要解析消息,因为您知道每个新消息意味着更改按钮状态)。所以,例如在你的onCreate()回调中:
handler = new Handler(){
public void handleMessage(Message message){
if(message.getBundle().getBoolean("STATE"))
//activate button
else
//deactivate button
}
}
new MyThread(handler).start();
另一种解决方案是在应用程序中使用等待来自数据库的通知的反应代理。但这不是一个好设计,因为它会将您的应用程序和后端转变为退化服务器。