Android手持机扫码出入库的开发详解-7.SQLite CRUD操作
SQLite CRUD操作
SQLite CRUD程序图
flowchart TD
subgraph SQLite数据交互架构
subgraph 实体层
InStorage["InStorage.java\n入库实体类"]
end
subgraph DAO接口层
InStorageDAO["InStorageDAO.java\nCRUD操作接口"]
end
subgraph DAO实现层
InStorageDAOSqliteImpl["InStorageDAOSqliteImpl.java\nSQLite具体实现"]
TableCreation["表创建与管理"]
Transaction["事务处理"]
InStorageDAOSqliteImpl --> TableCreation
InStorageDAOSqliteImpl --> Transaction
end
subgraph 控制器层
InStorageScanCode["InStorageScanCode.java\n入库扫码控制器"]
ScanReceiver["扫码广播接收器"]
AsyncTask["异步任务处理"]
DataList["数据列表展示"]
InStorageScanCode --> ScanReceiver
InStorageScanCode --> AsyncTask
InStorageScanCode --> DataList
end
subgraph 工具类
DAOFactory["DAOFactory.java\nDAO工厂"]
SqliteDBConnection["SqliteDBConnection.java\nSQLite连接管理"]
ConnectionPool["连接池管理"]
CloseResources["资源关闭机制"]
SqliteDBConnection --> ConnectionPool
SqliteDBConnection --> CloseResources
end
subgraph 数据流向
ScanReceiver --> |扫码数据| SaveData["SaveDataToSqlite"]
SaveData --> |创建实体| InStorage
InStorage --> |批量插入| InStorageDAO
AsyncTask --> |删除/上传| InStorageDAO
DataList --> |查询| InStorageDAO
end
%% 模块间关系
InStorageScanCode --> |获取实例| DAOFactory
DAOFactory --> |创建| InStorageDAOSqliteImpl
InStorageDAOSqliteImpl --> |实现| InStorageDAO
InStorageScanCode --> |数据库连接| SqliteDBConnection
InStorageDAOSqliteImpl --> |操作数据库| SqliteDBConnection
end
%% 整体流程
User[用户操作] --> |扫码| ScanReceiver
User --> |查询| InStorageScanCode
User --> |删除| InStorageScanCode
User --> |上传| InStorageScanCode
DataList --> |更新UI| UI[界面展示]
AsyncTask --> |操作结果| UI
SQLite CRUD源代码
1. 实体类 (entity/InStorage.java)
java
package cbw.materials.entity;
import java.io.Serializable;
/**
* 入库实体类
*/
public class InStorage implements Serializable {
private String str_货位号;
private String str_材料名称;
private String str_材料规格;
private String str_颜色;
private String str_库管员;
private String str_厂家缩写;
private String str_CBW对照号;
private String str_单位;
private String str_材料条码;
private String str_厂家代码;
private String str_生产日期;
private String str_批号;
private int int_数量;
private String str_库管编码;
private String str_码文;
private String str_扫码人;
private String str_扫码时间;
private String str_扫码仓库;
private int int_上传标记;
private long Long_ID;
/**
* 创建默认实例
*/
public static InStorage newInstance() {
InStorage inStorage = new InStorage();
inStorage.setStr_货位号("");
inStorage.setStr_材料名称("");
inStorage.setStr_材料规格("");
inStorage.setStr_颜色("");
inStorage.setStr_库管员("");
inStorage.setStr_厂家缩写("");
inStorage.setStr_CBW对照号("");
inStorage.setStr_单位("");
inStorage.setStr_材料条码("");
inStorage.setStr_厂家代码("");
inStorage.setStr_生产日期("");
inStorage.setStr_批号("");
inStorage.setInt_数量(0);
inStorage.setStr_库管编码("");
inStorage.setStr_码文("");
inStorage.setStr_扫码人("");
inStorage.setStr_扫码时间("");
inStorage.setStr_扫码仓库("");
inStorage.setInt_上传标记(0);
inStorage.setLong_ID(0);
return inStorage;
}
// 省略getter和setter方法...
}
2. DAO接口 (dao/InStorageDAO.java)
java
package cbw.materials.dao;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.List;
import cbw.materials.entity.InStorage;
/**
* 入库数据访问接口
*/
public interface InStorageDAO {
/**
* 插入单条数据
*/
Cursor insertData(SQLiteDatabase db, InStorage inStorage) throws Exception;
/**
* 插入多条数据
*/
Cursor insertDatas(SQLiteDatabase db, List<InStorage> inStorages) throws Exception;
/**
* 删除单条数据
*/
Cursor deleteData(SQLiteDatabase db, long Id) throws Exception;
/**
* 删除所有数据
*/
Cursor deleteAllData(SQLiteDatabase db) throws Exception;
/**
* 根据条件删除数据
*/
Cursor deleteCriteriaData(SQLiteDatabase db, String Criteria) throws Exception;
/**
* 查询所有数据
*/
Cursor queryAll(SQLiteDatabase db) throws Exception;
/**
* 根据ID查询数据
*/
InStorage findById(SQLiteDatabase db, long Id) throws Exception;
/**
* 分页查询数据
*/
List<InStorage> findAll(int page, int rowsPerPage) throws Exception;
/**
* 检查并创建表
*/
String checkCreateTable(SQLiteDatabase db) throws Exception;
/**
* 更新数据
*/
Cursor updateData(SQLiteDatabase db, InStorage inStorage) throws Exception;
}
3. DAO实现类 (dao/impl/InStorageDAOSqliteImpl.java)
java
package cbw.materials.dao.impl;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.sql.SQLException;
import java.util.List;
import cbw.materials.entity.InStorage;
import cbw.materials.dao.InStorageDAO;
import cbw.materials.util.SqliteQueryData;
public class InStorageDAOSqliteImpl implements InStorageDAO {
static final String KEY_ROWID = "_ID";
static final String KEY_货位号="货位号";
static final String KEY_材料名称="材料名称";
static final String KEY_材料规格="材料规格";
static final String KEY_颜色="颜色";
static final String KEY_库管员="库管员";
static final String KEY_厂家缩写="厂家缩写";
static final String KEY_CBW对照号="CBW对照号";
static final String KEY_单位="单位";
static final String KEY_材料条码="材料条码";
static final String KEY_厂家代码="厂家代码";
static final String KEY_生产日期="生产日期";
static final String KEY_批号="批号";
static final String KEY_数量="数量";
static final String KEY_库管编码="库管编码";
static final String KEY_码文="码文";
static final String KEY_扫码人="扫码人";
static final String KEY_扫码时间="扫码时间";
static final String KEY_扫码仓库="扫码仓库";
static final String KEY_上传标记="上传标记";
static final String message="";
static final String TAG = "SqliteDBConnection";
static final String DATABASE_TABLE = "InStorageScanCodes";
private SqliteQueryData sqliteQueryData=new SqliteQueryData();
@Override
public Cursor insertData(SQLiteDatabase db, InStorage inStorage) throws Exception {
ContentValues initialValues;
Cursor cursor=null;
db.beginTransaction();
try {
initialValues = new ContentValues();
initialValues.put(KEY_货位号,inStorage.getStr_货位号());
initialValues.put(KEY_材料名称,inStorage.getStr_材料名称());
initialValues.put(KEY_材料规格,inStorage.getStr_材料规格());
initialValues.put(KEY_颜色,inStorage.getStr_颜色());
initialValues.put(KEY_库管员,inStorage.getStr_库管员());
initialValues.put(KEY_厂家缩写,inStorage.getStr_厂家缩写());
initialValues.put(KEY_CBW对照号,inStorage.getStr_CBW对照号());
initialValues.put(KEY_单位,inStorage.getStr_单位());
initialValues.put(KEY_材料条码,inStorage.getStr_材料条码());
initialValues.put(KEY_厂家代码,inStorage.getStr_厂家代码());
initialValues.put( KEY_生产日期,inStorage.getStr_生产日期());
initialValues.put(KEY_批号,inStorage.getStr_批号());
initialValues.put(KEY_数量,inStorage.getInt_数量());
initialValues.put(KEY_库管编码,inStorage.getStr_库管编码());
initialValues.put(KEY_码文,inStorage.getStr_码文());
initialValues.put(KEY_扫码人,inStorage.getStr_扫码人());
initialValues.put(KEY_扫码时间,inStorage.getStr_扫码时间());
initialValues.put(KEY_扫码仓库,inStorage.getStr_扫码仓库());
initialValues.put(KEY_上传标记,inStorage.getInt_上传标记());
long l=db.insert(DATABASE_TABLE, null,initialValues);
// 设置事务标志为成功,当结束事务时就会提交事务
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 结束事务
db.endTransaction();
}
String str_Sql="select top 1 _id,";
str_Sql = str_Sql + "货位号,";
str_Sql = str_Sql + "材料名称,";
str_Sql = str_Sql + "材料规格,";
str_Sql = str_Sql + "颜色,";
str_Sql = str_Sql + "库管员,";
str_Sql = str_Sql + "厂家缩写,";
str_Sql = str_Sql + "CBW对照号,";
str_Sql = str_Sql + "单位,";
str_Sql = str_Sql + "材料条码,";
str_Sql = str_Sql + "厂家代码,";
str_Sql = str_Sql + "生产日期,";
str_Sql = str_Sql + "批号,";
str_Sql = str_Sql + "数量,";
str_Sql = str_Sql + "库管编码,";
str_Sql = str_Sql + "码文,";
str_Sql = str_Sql + "扫码人,";
str_Sql = str_Sql + "扫码时间,";
str_Sql = str_Sql + "扫码仓库,";
str_Sql = str_Sql + "上传标记";
str_Sql = str_Sql + " from instoragescancodes order by _id desc";
cursor=sqliteQueryData.RowsCols(db,str_Sql);
return cursor;
}
@Override
public Cursor insertDatas(SQLiteDatabase db, List<InStorage> inStorages) throws Exception {
ContentValues initialValues;
Cursor cursor=null;
db.beginTransaction();
try {
for(InStorage inStorage:inStorages){
initialValues = new ContentValues();
initialValues.put(KEY_货位号,inStorage.getStr_货位号());
initialValues.put(KEY_材料名称,inStorage.getStr_材料名称());
initialValues.put(KEY_材料规格,inStorage.getStr_材料规格());
initialValues.put(KEY_颜色,inStorage.getStr_颜色());
initialValues.put(KEY_库管员,inStorage.getStr_库管员());
initialValues.put(KEY_厂家缩写,inStorage.getStr_厂家缩写());
initialValues.put(KEY_CBW对照号,inStorage.getStr_CBW对照号());
initialValues.put(KEY_单位,inStorage.getStr_单位());
initialValues.put(KEY_材料条码,inStorage.getStr_材料条码());
initialValues.put(KEY_厂家代码,inStorage.getStr_厂家代码());
initialValues.put( KEY_生产日期,inStorage.getStr_生产日期());
initialValues.put(KEY_批号,inStorage.getStr_批号());
initialValues.put(KEY_数量,inStorage.getInt_数量());
initialValues.put(KEY_库管编码,inStorage.getStr_库管编码());
initialValues.put(KEY_码文,inStorage.getStr_码文());
initialValues.put(KEY_扫码人,inStorage.getStr_扫码人());
initialValues.put(KEY_扫码时间,inStorage.getStr_扫码时间());
initialValues.put(KEY_扫码仓库,inStorage.getStr_扫码仓库());
initialValues.put(KEY_上传标记,inStorage.getInt_上传标记());
long l=db.insert(DATABASE_TABLE, null,initialValues);
}
// 设置事务标志为成功,当结束事务时就会提交事务
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 结束事务
db.endTransaction();
}
String str_Sql="select _id,";
str_Sql = str_Sql + "货位号,";
str_Sql = str_Sql + "材料名称,";
str_Sql = str_Sql + "材料规格,";
str_Sql = str_Sql + "颜色,";
str_Sql = str_Sql + "库管员,";
str_Sql = str_Sql + "厂家缩写,";
str_Sql = str_Sql + "CBW对照号,";
str_Sql = str_Sql + "单位,";
str_Sql = str_Sql + "材料条码,";
str_Sql = str_Sql + "厂家代码,";
str_Sql = str_Sql + "生产日期,";
str_Sql = str_Sql + "批号,";
str_Sql = str_Sql + "数量,";
str_Sql = str_Sql + "库管编码,";
str_Sql = str_Sql + "码文,";
str_Sql = str_Sql + "扫码人,";
str_Sql = str_Sql + "扫码时间,";
str_Sql = str_Sql + "扫码仓库,";
str_Sql = str_Sql + "上传标记";
str_Sql = str_Sql + " from instoragescancodes order by _id desc";
cursor=sqliteQueryData.RowsCols(db,str_Sql);
return cursor;
}
@Override
public Cursor updateData(SQLiteDatabase db, InStorage inStorage, long Id) throws Exception {
return null;
}
@Override
public Cursor deleteData(SQLiteDatabase db, long Id) throws Exception {
Cursor cursor=null;
int bol=db.delete(DATABASE_TABLE, KEY_ROWID + "=" +Id, null);
if( bol>0){
String str_Sql="select _id,";
str_Sql = str_Sql + "货位号,";
str_Sql = str_Sql + "材料名称,";
str_Sql = str_Sql + "材料规格,";
str_Sql = str_Sql + "颜色,";
str_Sql = str_Sql + "库管员,";
str_Sql = str_Sql + "厂家缩写,";
str_Sql = str_Sql + "CBW对照号,";
str_Sql = str_Sql + "单位,";
str_Sql = str_Sql + "材料条码,";
str_Sql = str_Sql + "厂家代码,";
str_Sql = str_Sql + "生产日期,";
str_Sql = str_Sql + "批号,";
str_Sql = str_Sql + "数量,";
str_Sql = str_Sql + "库管编码,";
str_Sql = str_Sql + "码文,";
str_Sql = str_Sql + "扫码人,";
str_Sql = str_Sql + "扫码时间,";
str_Sql = str_Sql + "扫码仓库,";
str_Sql = str_Sql + "上传标记";
str_Sql = str_Sql + " from instoragescancodes order by _id desc";
cursor=sqliteQueryData.RowsCols(db,str_Sql);
}
return cursor;
}
@Override
public Cursor deleteAllData(SQLiteDatabase db) throws Exception {
Cursor cursor=null;
db.execSQL("delete from instoragescancodes");
//下面执行的SQL语句将数据表的ID归零,因为在创建表后ID列的值会在sqlite_sequence表中进行记录
db.execSQL("UPDATE sqlite_sequence SET seq = 0 WHERE name ='instoragescancodes'");
String str_Sql="select _id,货位号,材料条码,扫码人,编码,时间 from instoragescancodes order by _id desc";
cursor=sqliteQueryData.RowsCols(db,str_Sql);
return cursor;
}
@Override
public String deleteCriteriaData(SQLiteDatabase db, String str_Sql) throws Exception {
String strInfo="";
db.execSQL(str_Sql.toString());
strInfo="根据条件删除数据完毕!";
Log.d("debug","根据条件删除数据完毕!\n"+str_Sql);
return strInfo;
}
@Override
public String checkCreateTable(SQLiteDatabase db) throws Exception {
String strCreateTableInfo="";
//执行DDL创建数据表
Cursor cursor = null;
String oSql = "select count(*) as c from sqlite_master where type ='table' and name ='instoragescancodes' ";
try {
int count = sqliteQueryData.getCount(db, oSql);
if (count == 0) {
strCreateTableInfo = "数据表InStorageScanCodes不存在?";
Log.d("debug", "数据表InStorageScanCodes不存在?");
String str_Sql = "create table instoragescancodes(";
str_Sql = str_Sql + "_id INTEGER primary key autoincrement,";
str_Sql = str_Sql + "货位号 text not null,";
str_Sql = str_Sql + "材料名称 text null,";
str_Sql = str_Sql + "材料规格 text null,";
str_Sql = str_Sql + "颜色 text null,";
str_Sql = str_Sql + "库管员 text null,";
str_Sql = str_Sql + "厂家缩写 text null,";
str_Sql = str_Sql + "CBW对照号 text null,";
str_Sql = str_Sql + "单位 text null,";
str_Sql = str_Sql + "材料条码 text null,";
str_Sql = str_Sql + "厂家代码 text null,";
str_Sql = str_Sql + "生产日期 text null,";
str_Sql = str_Sql + "批号 text null,";
str_Sql = str_Sql + "数量 int null,";
str_Sql = str_Sql + "库管编码 text null,";
str_Sql = str_Sql + "码文 text not null,";
str_Sql = str_Sql + "扫码人 text not null,";
str_Sql = str_Sql + "扫码时间 text not null,";
str_Sql = str_Sql + "扫码仓库 text not null,";
str_Sql = str_Sql + "上传标记 int null";
str_Sql = str_Sql + ")";
db.execSQL(str_Sql.toString());
//提示信息
strCreateTableInfo = "数据表InStorageScanCodes创建完毕!";
Log.d("debug", "数据表InStorageScanCodes创建完毕!");
}
} catch (SQLException e) {
e.printStackTrace();
}
return strCreateTableInfo;
}
@Override
public String createTable(SQLiteDatabase db) throws Exception {
String strCreateTableInfo="";
//执行DDL创建数据表
Cursor cursor = null;
String oSql = "select count(*) as c from sqlite_master where type ='table' and name ='instoragescancodes' ";
try {
int count = sqliteQueryData.getCount(db, oSql);
if (count > 0) {
strCreateTableInfo="数据表InStorageScanCodes已存在?";
db.execSQL("drop table instoragescancodes");
Log.d("debug", "数据表InStorageScanCodes删除完毕!");
}
String str_Sql = "create table instoragescancodes(";
str_Sql = str_Sql + "_id INTEGER primary key autoincrement,";
str_Sql = str_Sql + "货位号 text not null,";
str_Sql = str_Sql + "材料名称 text null,";
str_Sql = str_Sql + "材料规格 text null,";
str_Sql = str_Sql + "颜色 text null,";
str_Sql = str_Sql + "库管员 text null,";
str_Sql = str_Sql + "厂家缩写 text null,";
str_Sql = str_Sql + "CBW对照号 text null,";
str_Sql = str_Sql + "单位 text null,";
str_Sql = str_Sql + "材料条码 text null,";
str_Sql = str_Sql + "厂家代码 text null,";
str_Sql = str_Sql + "生产日期 text null,";
str_Sql = str_Sql + "批号 text null,";
str_Sql = str_Sql + "数量 int null,";
str_Sql = str_Sql + "库管编码 text null,";
str_Sql = str_Sql + "码文 text not null,";
str_Sql = str_Sql + "扫码人 text not null,";
str_Sql = str_Sql + "扫码时间 text not null,";
str_Sql = str_Sql + "扫码仓库 text not null,";
str_Sql = str_Sql + "上传标记 int null";
str_Sql = str_Sql + ")";
db.execSQL(str_Sql.toString());
//提示信息
strCreateTableInfo = "手持机【入库扫码表】数据清理完毕!";
Log.d("debug", "数据表InStorageScanCodes创建完毕");
} catch (SQLException e) {
e.printStackTrace();
}
return strCreateTableInfo;
}
@Override
public InStorage findById(SQLiteDatabase db, long Id) throws Exception {
return null;
}
@Override
public List<InStorage> findAll(SQLiteDatabase db) throws Exception {
return null;
}
@Override
public List<InStorage> findAll(SQLiteDatabase db, String queryBuilder) throws Exception {
return null;
}
@Override
public List<InStorage> findAll(SQLiteDatabase db, int page, int rowsPerPage) throws Exception {
return null;
}
@Override
public List<InStorage> findAll(SQLiteDatabase db, String queryBuilder, int page, int rowsPerPage) throws Exception {
return null;
}
@Override
public int getTotalPages(SQLiteDatabase db, int rowsPerPage) throws Exception {
return 0;
}
@Override
public int getTotalPages(SQLiteDatabase db, String customQuery, int rowsPerPage) throws Exception {
return 0;
}
@Override
public Cursor queryAll(SQLiteDatabase db) throws Exception {
String str_Sql="select _id,";
str_Sql = str_Sql + "货位号,";
str_Sql = str_Sql + "材料名称,";
str_Sql = str_Sql + "材料规格,";
str_Sql = str_Sql + "颜色,";
str_Sql = str_Sql + "库管员,";
str_Sql = str_Sql + "厂家缩写,";
str_Sql = str_Sql + "CBW对照号,";
str_Sql = str_Sql + "单位,";
str_Sql = str_Sql + "材料条码,";
str_Sql = str_Sql + "厂家代码,";
str_Sql = str_Sql + "生产日期,";
str_Sql = str_Sql + "批号,";
str_Sql = str_Sql + "数量,";
str_Sql = str_Sql + "库管编码,";
str_Sql = str_Sql + "码文,";
str_Sql = str_Sql + "扫码人,";
str_Sql = str_Sql + "扫码时间,";
str_Sql = str_Sql + "扫码仓库,";
str_Sql = str_Sql + "上传标记";
str_Sql = str_Sql + " from instoragescancodes";
//String oSql="select * from contacts";
//Cursor cursor= db.rawQuery(oSql,null);
Cursor cursor=sqliteQueryData.RowsCols(db,str_Sql);
return cursor;
}
}
4. 工具类
4.1 DAO工厂 (util/DAOFactory.java)
java
package cbw.materials.util;
import cbw.materials.dao.BillOfMaterialDAO;
import cbw.materials.dao.InStorageDAO;
import cbw.materials.dao.ManufacturerDAO;
import cbw.materials.dao.StoreKeeperDAO;
import cbw.materials.dao.impl.BillOfMaterialDAOSqliteImpl;
import cbw.materials.dao.impl.InStorageDAOSqliteImpl;
import cbw.materials.dao.impl.ManufacturerDAOSqliteImpl;
import cbw.materials.dao.impl.StoreKeeperDAOSqliteImpl;
/**
* DAO工厂类
*/
public class DAOFactory {
public static Object getInstance(String type) {
if (type.equals("InStorageDAO")) {
return new InStorageDAOSqliteImpl();
} else if (type.equals("BillOfMaterialDAO")) {
return new BillOfMaterialDAOSqliteImpl();
} else if (type.equals("ManufacturerDAO")) {
return new ManufacturerDAOSqliteImpl();
} else if (type.equals("StoreKeeperDAO")) {
return new StoreKeeperDAOSqliteImpl();
}
return null;
}
}
4.2 SQLite数据库连接 (util/SqliteDBConnection.java)
java
package cbw.materials.util;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* SQLite数据库连接管理
*/
public class SqliteDBConnection {
static final String DATABASE_NAME = "IMDB";
static final int DATABASE_VERSION = 1;
private SQLiteDatabase db;
private DatabaseHelper DBHelper;
/**
* 构造函数
*/
public SqliteDBConnection(Context ctx) {
this.DBHelper = new DatabaseHelper(ctx);
}
/**
* 打开数据库连接
*/
public SqliteDBConnection open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
/**
* 获取数据库实例
*/
public SQLiteDatabase getDb() {
return db;
}
/**
* 关闭数据库连接
*/
public void close() {
DBHelper.close();
}
/**
* 数据库帮助类
*/
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 数据库创建时执行
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 数据库升级时执行
}
}
}
5. 控制器 (controller/InStorageScanCode.java)
java
package cbw.materials.controller;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import cbw.materials.dao.InStorageDAO;
import cbw.materials.entity.InStorage;
import cbw.materials.util.DAOFactory;
import cbw.materials.util.SqliteDBConnection;
/**
* 入库扫码控制器
*/
public class InStorageScanCode extends AppCompatActivity {
private SQLiteDatabase db;
private InStorageDAO dao = (InStorageDAO) DAOFactory.getInstance("InStorageDAO");
private SqliteDBConnection sda;
private static String userName;
// 扫码广播接收器
private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
byte[] barocode = intent.getByteArrayExtra("barocode");
int barocodelen = intent.getIntExtra("length", 0);
String barcodeStr = new String(barocode, 0, barocodelen);
// 解析扫码数据并保存到SQLite
if (strCode != null && strHwh != null) {
String[] codes = strCode.split(",");
SaveDataToSqlite(codes, strHwh);
}
}
};
// 保存数据到SQLite
private void SaveDataToSqlite(String[] Codes, String Hwh) {
List<InStorage> inStorages = new ArrayList<>();
for (int i = 0; i < Codes.length; i++) {
InStorage inStorage = InStorage.newInstance();
inStorage.setStr_货位号(Hwh);
inStorage.setStr_码文(Codes[i]);
inStorage.setStr_扫码人(userName);
inStorage.setStr_扫码时间(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// 解析条码信息
String str_code = Codes[i] + " ";
inStorage.setStr_材料条码(str_code.substring(0, 5));
inStorage.setStr_厂家代码(str_code.substring(5, 7));
inStorage.setStr_生产日期(ConvertDate(str_code.substring(7, 13)));
inStorage.setStr_批号(str_code.substring(13, 14));
inStorage.setInt_数量(Integer.parseInt(str_code.substring(14, 20)));
inStorage.setStr_库管编码(str_code.substring(20, 21));
inStorages.add(inStorage);
}
try {
if (sda == null) {
OpenOrCreateDatabase();
}
String str_CreateTableInfo = dao.checkCreateTable(db);
Cursor cursor = dao.insertDatas(db, inStorages);
Refresh_ListView(cursor);
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除数据异步任务
private class DeleteDataOnClickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
// 确认对话框
Dialog dialog = dialogTool.dialog(InStorageScanCode.this, "提示信息?", R.drawable.user, "你确定要删除ID为<<" + P_Id + ">>的记录吗?");
dialog.show();
executeFunctionName = "DeleteData";
new QueryAddressTask().execute("DeleteData");
}
}
// 异步任务类
class QueryAddressTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
// 处理后台任务
}
@Override
protected void onPostExecute(String result) {
if (executeFunctionName.equals("DeleteData")) {
try {
Cursor cursor = dao.deleteData(db, Long.parseLong(P_Id));
Toast.makeText(InStorageScanCode.this, "数据删除完毕!", Toast.LENGTH_LONG).show();
Refresh_ListView(cursor);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 创建或打开数据库
private void OpenOrCreateDatabase() {
sda = new SqliteDBConnection(this);
sda.open();
db = sda.getDb();
}
// 关闭数据库
private void CloseDatabase() {
if (db != null && db.isOpen()) {
db.close();
sda.close();
db = null;
sda = null;
}
}
// 刷新列表
private void Refresh_ListView(Cursor cursor) {
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.activity_in_storage_scan_code_listview,
cursor,
new String[]{"_id", "货位号", "材料名称", "材料规格", "颜色", "库管员", "厂家缩写", "CBW对照号", "单位",
"材料条码", "厂家代码", "生产日期", "批号", "数量", "库管编码", "码文", "扫码人", "扫码时间", "扫码仓库"},
new int[]{R.id.textView_listView_InStorageScanCode_DataList_ID, ...});
listView_InStorageScanCode_DataList.setAdapter(adapter);
}
// 其他方法...
}