我试图直接从mysql db更改按钮的状态。状态为:
1.启用
2.禁用。
我有一个Asynctask
执行一些查询并给出一些结果的结果,如true或false。如果给出true,则启用按钮,否则禁用。
如果要手动更改db中的某个值,我希望按钮自动更改状态。什么是最好的方法?
谢谢
我认为周期性地监听更改的线程是最好的解决方案。尽管如此,使用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();
另一个解决方案是在您的应用程序中使用反应代理,以等待来自数据库的通知。但这不是一个好的设计,因为它将把您的应用程序和后端都变成退化的服务器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句