前言

前段时间要求项目中需要实现一个刷卡考勤的功能,因为涉及到上传图片文件,为加快考勤的速度,封装了一个异步轮询上传文件的帮助类

效果

先上效果图

设计思路

数据库使用的框架是GreenDao,一个非常好用的东西

先创建一个GreenDao的数据表的实体

来保存我们的考勤记录,我这边只写了一下几个参数,方便大家观看,使用的时候大家记得要编译一下来生成Dao文件跟get,set方法

@Entity

public class Attendance {

@Id(autoincrement = true)

public Long id;

/**

* 是否已上传

* */

public Boolean isUpload;

/**

* 文件路径

* */

public String path;

/**

* 姓名

* */

private String name;

/**

* 考勤时间

* */

private Date attendanceDate;

}

帮助类的实现

首先是轮询线程判断是否运行

/**

* 开启上传线程

*/

public void startUpThread() {

if (!isRun) {

return;

}

singleThreadExecutor.execute(upRunnable);

}

线程需要注意内存泄露,这个是必须的

/**

* 自建一个Runnable判断activity是否销毁,防止内存泄露

* */

private class UpRunnable implements Runnable {

private WeakReference activityWeakReference;

public UpRunnable(Activity activity) {

//使用弱引用赋值

activityWeakReference = new WeakReference<>(activity);

}

@Override

public void run() {

//判断activity是否已销毁

if (activityWeakReference.get() != null){

upRecord();

}

}

}

先查询队列判断是否有数据需要上传

没有需要上传的数据延迟两秒后从数据库查询并填充队列

开始下一次的轮询

private void upRecord() {

Attendance Attendance = queue.poll();

if (null == Attendance) {

//没有需要上传的文件

LogUtils.d("上传队列为空 2秒后开始 检查是否存在上报");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

handleLocalAttendance();

startUpThread();

} else {

//有需要上传的文件,回调给页面

if (onUploadListener != null) {

onUploadListener.onUpload(Attendance);

} else {

startUpThread();

}

}

}

查询数据库的代码

/**

* 查询是否有上传任务

*/

private void handleLocalAttendance() {

List attendances = DBHelper.getInstance().getSession().getAttendanceDao()

.queryBuilder().where(AttendanceDao.Properties.IsUpload.eq(false))

.list();

if (null != attendances && attendances.size() > 0) {

queue.addAll(attendances);

}

}

帮助类的使用

首先是先在初始化帮助类

UploadHelper uploadHelper = new UploadHelper(this);

uploadHelper.setOnUploadListener(new OnUploadListener() {

@Override

public void onUpload(Attendance attendance) {

//有需要上传的文件

uploadToServer(attendance);

}

});

uploadHelper.startUpThread();

接口调用成功后标记成功,开始下一次的轮询

uploadHelper.uploadSuccess(dataModel);

在打卡回调中添加数据库记录,这样轮询线程就会查到

//数据库

Attendance attendance = new Attendance();

attendance.setPath(Environment.getExternalStorageDirectory() + "/" + "Images/picture.png");

attendance.setIsUpload(false);

attendance.setName("张三");

attendance.setAttendanceDate(new Date());

uploadHelper.addRecord(attendance);

updateDataList();

ueditor1&period;3&period;6jsp版在struts2应用中上传图片报&quot&semi;未找到上传文件&quot&semi;解决方案

摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...

python中使用multipart&sol;form-data请求上传文件

最近测试的接口是上传文件的接口,上传单个文件,我主要使用了2种方法~ 接口例如: URL: http://www.baidu.com/*** method:post 参数: { "salar ...

不使用ASP&period;NET中的服务器控件将如何上传文件?

遇到文件的上传时,可能会有大部分的开发者喜欢使用服务器控件,虽然很方便,但是却不能很好的控制,不具灵活性. 现给出例子,使用html标签语言灵活的控制文件的上传. 1.html部分

在MVC中利用uploadify插件实现上传文件的功能

趁着近段的空闲时间,开发任务不是很重,就一直想把以前在仓促时间里所写的多文件上传功能改一下,在网上找了很多例子,觉得uploadify还可以,就想用它来试试.实现自己想要的功能.根据官网的开发文档,同 ...

Ubuntu18&period;04中安装vsftpd服务&sol; ftp上传文件提示无权限 553 Could not create file&period;

1,安装 $ sudo apt-get install vsftpd 2.配置 备份并创建新的配置文件. $ sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_ori ...

MFC中使用post提交form-data上传文件

已经有将近6年时间没写过MFC了,想想以前我也是写VC++入门程序开发的,那时候写协议栈.搞语音编码.做视频压缩和实时数据传输,相比现在更多偏业务的开发,那时候搞得都是非常技术的东西.眨眼间,MFC已 ...

web 中常用的两种上传文件的方法总结

这里我们来总结整理一下常用的两种文件上传方式以及要注意的东西: 1.springmvc .MultipartFile 的上传方式. 2.org.apache.commons.fileupload 使用 ...

MapReduce中使用SequenceFile的方式上传文件到集群中

如果有很多的小文件,上传到HDFS集群,每个文件都会对应一个block块,一个block块的大小默认是128M,对于很多的小文件来说占用了非常多的block数量,就会影响到内存的消耗, MapRedu ...

C&num;远程执行Linux系统中Shell命令和SFTP上传文件

一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...

随机推荐

【JavaScript吉光片羽】遭遇IE8

最初对做兼容性的认知只停留在UI层面,但其实UI层面都还好,因为毕竟你可以直接看得见现象,更为重要的是在JavaScript层面,因为这个部分涉及到功能性,前者最多是体验性的问题.下面扯一下这几天遇到 ...

ORA-12545&colon;因目标主机或对象不存在,连接失败&excl;

错误原因是配置错误主机名 解决: 1. 搜索你自己安装的Oracle路径,找到这俩个文件 tnsnames.ora 和 listener.ora,修改这两个文件,修改HOST=自己的主机名 我的路径如 ...

【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化

linux的ftp轮询上传文件,Android中实现异步轮询上传文件相关推荐

  1. [译] Don’t call me, I’ll call you:使用 Redux-Saga 管理 React 应用中的异步 action (上)...

    原文地址:Don't call me, I'll call you: Side effects management with Redux-Saga (Part 1) 原文作者:David Dvora ...

  2. IOl:从文件夹中找到后缀名为TXT的文件,然后复制到指定的文件夹

    /*** 从文件夹中找到后缀名为TXT的文件,然后复制到指定的文件夹* @param args* @throws IOException*/public static void main(String ...

  3. android中设置页面边距,如何在android中使用代码在imageview上设置边距?

    我想在运行时创建一个布局,然后我想在运行时使用循环添加一些imageview.但问题是我使用LayoutParams的余量根本无法工作.我尝试了很多,但没有找到任何解决方案.我也附加我的代码.如何在a ...

  4. java多图片上传插件,Bootstrap中的fileinput 多图片上传及编辑功能

    Bootstrap中的fileinput 多图片上传及编辑功能 2019-01-01 编程之家收集整理的这篇文章主要介绍了Bootstrap中的fileinput 多图片上传及编辑功能,编程之家小编觉 ...

  5. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  6. android不能访问数据库文件,android下访问已存在的sqlite数据库文件的办法

    问题来源:android下的sqlite数据库一般都是单机的,当一个应用中数据库的数据多的时候,每换一个机子都重新配置一下数据库中所有数据显然是浪费时间的,所以最好的办法就是可以访问一个已经存在的数据 ...

  7. linux的全盘加密与文件系统加密在android中的应用

    目录 1.本文档简述 1.1.定义: 1.2.学习目标: 2.预备知识 2.1.加密技术 2.2.典型加密算法 2.3.Linux加密工具 3.Android 系统的加密应用 3.1.原理与流程 3. ...

  8. android 颜色资源文件,android中colors.xml颜色设置资源文件的方法

    1. 打开res目录下的values文件夹,双击打开colors.xml文件进行编辑 上代码 #008577 #00574B #D81B60 #ff0000 #0000ff 2. 在res目录下的la ...

  9. php接收post写入文件,PHP中Post和Get获取数据写入文件中

    有时候Post或者Get传过来的数据我们不知道它是个什么样的形式,它可能是JSON格式或者就是简单提交过来的数据,这时候我们可以把他写入到文本中,就可以看到传过来的数据是什么格式了. $val = & ...

最新文章

  1. 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗
  2. PDF转Word技巧,看这篇足够
  3. unity的vr场景怎么做_营销技巧逐渐失效,如何通过场景化营销重新赢回市场?...
  4. 关于ssh 配置文件的参数说明
  5. linux有关网络服务的接口,linux系统有关网络服务接口定义是哪个?
  6. Win10 jdk的安装以及环境变量的配置,及需要注意的坑
  7. 安全彻底的卸载工具App Cleaner Uninstaller for Mac
  8. 二级 c语言真题及答案,3月计算机二级C语言真题及答案(完整版)
  9. win10更新后,gambit无法使用,出现exceed安装弹窗解决方法
  10. 流媒体RTMP协议解析
  11. python爬取酷狗音乐_python 爬虫 爬取酷狗音乐
  12. linux imx6 sdio wifi,关于ATWILC1000 wifi模块在imx6q上SDIO接口驱动调试
  13. python论文排版格式_论文排版(一):三分钟了解页面设置
  14. 弘辽科技:如何做好淘宝店铺推广?有什么技巧吗?
  15. 清空html输入框,jquery清空textarea等输入框
  16. 魔兽争霸显示比例调整的问题
  17. css如何把北京图片变小,css怎么把图片缩小
  18. windows编写bat脚本删除隐藏文件夹下的所有文件
  19. 命令集matlab,Matlab常用命令集2
  20. CentOS7-查看和设置日期时间

热门文章

  1. 使用 gperf 实现高效的 C/C++ 命令行处理
  2. Python基于OpenCV的人脸检测
  3. hadoop HA启动时 两个namenode节点都是standby,解决办法
  4. 大厂面试官最喜欢问的面试难点
  5. 【MySQL】深入浅出剖析mysql事务锁机制 - 笔记
  6. CentOS 6 安装Hadoop 2.6 (四)运行简单例子
  7. html不可选择的按钮,HTML功能无法使用按钮
  8. C++学习笔记:(一)面向对象 类与对象
  9. Zookeeper选举算法( FastLeader选主)
  10. 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告