linux的ftp轮询上传文件,Android中实现异步轮询上传文件
前言
前段時間要求項目中需要實現一個刷卡考勤的功能,因為涉及到上傳圖片文件,為加快考勤的速度,封裝了一個異步輪詢上傳文件的幫助類
效果
先上效果圖
設計思路
數據庫使用的框架是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.3.6jsp版在struts2應用中上傳圖片報";未找到上傳文件";解決方案
摘要: ueditor1.3.6jsp版在struts2應用中上傳圖片報"未找到上傳文件"解決方案 在struts2應用中使用ueditor富文本編輯器上傳圖片或者附件時,即使配置 ...
python中使用multipart/form-data請求上傳文件
最近測試的接口是上傳文件的接口,上傳單個文件,我主要使用了2種方法~ 接口例如: URL: http://www.baidu.com/*** method:post 參數: { "salar ...
不使用ASP.NET中的服務器控件將如何上傳文件?
遇到文件的上傳時,可能會有大部分的開發者喜歡使用服務器控件,雖然很方便,但是卻不能很好的控制,不具靈活性. 現給出例子,使用html標簽語言靈活的控制文件的上傳. 1.html部分
在MVC中利用uploadify插件實現上傳文件的功能
趁著近段的空閑時間,開發任務不是很重,就一直想把以前在倉促時間里所寫的多文件上傳功能改一下,在網上找了很多例子,覺得uploadify還可以,就想用它來試試.實現自己想要的功能.根據官網的開發文檔,同 ...
Ubuntu18.04中安裝vsftpd服務/ ftp上傳文件提示無權限 553 Could not create file.
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#遠程執行Linux系統中Shell命令和SFTP上傳文件
一.工具:SSH.Net 網址:https://github.com/sshnet/SSH.NET 二.調用命令代碼: Renci.SshNet.SshClient ssh = "); ss ...
隨機推薦
【JavaScript吉光片羽】遭遇IE8
最初對做兼容性的認知只停留在UI層面,但其實UI層面都還好,因為畢竟你可以直接看得見現象,更為重要的是在JavaScript層面,因為這個部分涉及到功能性,前者最多是體驗性的問題.下面扯一下這幾天遇到 ...
ORA-12545:因目標主機或對象不存在,連接失敗!
錯誤原因是配置錯誤主機名 解決: 1. 搜索你自己安裝的Oracle路徑,找到這倆個文件 tnsnames.ora 和 listener.ora,修改這兩個文件,修改HOST=自己的主機名 我的路徑如 ...
【轉載】 使用Anemometer基于pt-query-digest將MySQL慢查詢可視化
總結
以上是生活随笔為你收集整理的linux的ftp轮询上传文件,Android中实现异步轮询上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ftp 配额 quota,l
- 下一篇: linux父设备,linux 设备模型-