目录
- 概述
- 前期准备
- 主要代码
- 优化
概述
最近在写一个程序,需求是服务器端的程序会不断刷新数据库某字段的值,然后需要写一个客户端程序不断读取该字段并在界面上显示。在这里数据库使用MySQL,Android客户端与服务器端的数据交互使用Volley框架。
前期准备
Volley是Google官方推出的HTTP方法库,使用Volley框架需要在Android Studio中引入对应的包,具体可以参照我以前的文章:
Android使用Volley框架进行数据传输
主要代码
整个的实现逻辑是用户点击“START”后,开始不断拉取数据库中对应字段的值,并对UI控件进行赋值。同时,设置标志位getAgain,其含义如下:
getAgain = true:当前读取操作已完成,进行下一次读取;
getAgain = false:Volley子线程正在读取数据库对应字段的值,读取操作进行阻塞。
代码如下:
1.声明标志位变量:
public static boolean getAgain = true;
2.“START” Button点击事件:
mBtnBegin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//开始循环刷新
new Thread(new Runnable() {
@Override
public void run() {
//进行1000次读取操作
for(int i = 0; i < 1000; ++i){
//读取标志位判断
if(getAgain){
//进入读取状态
getAgain = false;
//从数据库拉取最新字段值
ShowMyCount(getApplicationContext(), LoginActivity.Username);
while (!getAgain){
//数据读取中,进行阻塞
}
}
}
}
}).start();
}
});
3.“ShowMyCount()”方法:
使用Volley框架与服务器进行交互可以查看上述的那篇文章,对于本文要实现的功能来讲,在“查询成功”的语句块中需要加入两个语句:
//查询成功,更新UI界面
mTvCount.setText(count);
//本次数据读取完成,取消阻塞状态
getAgain = true;
优化
1.在本文中更新UI界面的方式是直接在“ShowMyCount()”方法中使用setText()方法,但Android开发中,UI界面的更新一般是使用Handler机制。 2.本文的for循环循环了1000次以大致实现自动循环读取,但超过1000次后将不再更新UI界面,解决方法有两种:提升循环次数或改用while循环。