目录

  • 概述
  • 前期准备
  • 主要代码
  • 优化


概述

最近在写一个程序,需求是服务器端的程序会不断刷新数据库某字段的值,然后需要写一个客户端程序不断读取该字段并在界面上显示。在这里数据库使用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循环。