Android手持机扫码出入库的开发详解-4.盘点扫码
盘点扫码界面
盘点扫码程序图
flowchart TD
A[进入盘点扫码界面] --> B[初始化扫码设备]
B --> C[等待扫描材料条码]
C --> D[验证条码格式]
D -->|格式错误| E[提示错误信息]
D -->|格式正确| F[显示材料信息]
F --> G[等待扫描货位条码]
G --> H[验证货位格式]
H -->|格式错误| I[提示错误信息]
H -->|格式正确| J[显示货位信息]
J --> K[保存盘点记录]
K --> L[判断是否继续]
L -->|继续| C
L -->|结束| M[执行数据上传]
M --> N[返回主界面]
盘点扫码源代码
public class ScanCodeInventoryCheck extends Activity {
private ScanDevice sm = null;
private String strCode = null;
private String strHwh = null;
private String userName;
private InventoryCheckDAO inventoryCheckDAO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_code_inventory_check);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
this.userName = bundle.getString("userName");
sm = new ScanDevice();
sm.initDevice(this);
sm.startScan();
inventoryCheckDAO = new InventoryCheckDAOSqliteImpl(this);
registerReceiver(mScanReceiver, new IntentFilter(ScanDevice.SCAN_ACTION));
}
private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ScanDevice.SCAN_ACTION)) {
byte[] barocode = intent.getByteArrayExtra("barocode");
int barocodelen = intent.getIntExtra("length", 0);
barcodeStr = new String(barocode, 0, barocodelen);
if (barcodeStr.length() == 21) {
strCode = barcodeStr;
new QueryAddressTask().execute(barcodeStr);
} else if (barcodeStr.length() == 8 || barcodeStr.length() == 9) {
strHwh = barcodeStr;
new QueryAddressTask().execute(barcodeStr);
} else {
Toast.makeText(ScanCodeInventoryCheck.this, "条码格式不正确,请重新扫描", Toast.LENGTH_SHORT).show();
}
if (strCode != null && strHwh != null) {
SaveDataToSqlite(new String[]{strCode}, strHwh);
}
}
}
};
private void SaveDataToSqlite(String[] codes, String hwh) {
List<InventoryCheck> inventoryChecks = new ArrayList<>();
for (String code : codes) {
InventoryCheck inventoryCheck = new InventoryCheck();
inventoryCheck.setCode(code);
inventoryCheck.setHwh(hwh);
inventoryCheck.setName(this.userName);
inventoryCheck.setDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
inventoryChecks.add(inventoryCheck);
}
try {
inventoryCheckDAO.insertDatas(inventoryChecks);
Toast.makeText(this, "盘点记录保存成功", Toast.LENGTH_SHORT).show();
strCode = null;
strHwh = null;
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "盘点记录保存失败", Toast.LENGTH_SHORT).show();
}
}
private void UploadData() {
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... params) {
try {
List<InventoryCheck> records = inventoryCheckDAO.getAllRecords();
if (records.isEmpty()) {
return true;
}
boolean success = HttpUtil.uploadInventoryCheckData(records);
if (success) {
inventoryCheckDAO.deleteAllRecords();
}
return success;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
Toast.makeText(ScanCodeInventoryCheck.this, "数据上传成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ScanCodeInventoryCheck.this, "数据上传失败", Toast.LENGTH_SHORT).show();
}
}
}.execute();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mScanReceiver);
if (sm != null) {
sm.stopScan();
sm.closeDevice();
}
}
}