调试通过获取设备信息实时更新二级页面重量,首页和二级页面列表页增加空数据展示
This commit is contained in:
@@ -2,6 +2,7 @@ package com.shuwei.intelligent.shelves
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
@@ -12,6 +13,7 @@ import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.chad.library.adapter4.util.setOnDebouncedItemClick
|
||||
import com.shuwei.intelligent.shelves.adapter.ShelfAdapter
|
||||
@@ -25,20 +27,26 @@ import com.shuwei.intelligent.shelves.net.RespData
|
||||
import com.shuwei.intelligent.shelves.net.UiState
|
||||
import com.shuwei.intelligent.shelves.serial.SerialPortManager
|
||||
import com.shuwei.intelligent.shelves.task.TaskManager
|
||||
import com.shuwei.intelligent.shelves.utils.UIUtils
|
||||
import com.shuwei.intelligent.shelves.utils.binaryToHex
|
||||
import com.shuwei.intelligent.shelves.utils.ext.gone
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
import com.shuwei.intelligent.shelves.utils.ext.visible
|
||||
import com.shuwei.intelligent.shelves.utils.f2C
|
||||
import com.shuwei.intelligent.shelves.utils.hexToBinary
|
||||
import com.shuwei.intelligent.shelves.utils.hexToDec
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlin.getValue
|
||||
|
||||
class HomeActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "HomeActivity"
|
||||
|
||||
private const val MM_DD_EEEE__HH_MM_SS = "MM月dd日 EEEE HH:mm:ss"
|
||||
|
||||
//协议头
|
||||
const val HEADER = "D6DADEDB"
|
||||
|
||||
@@ -63,6 +71,8 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
private val viewModel: NetViewModel by viewModels()
|
||||
|
||||
private val weightArray by lazy { SparseArray<Double?>() }
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged", "HardwareIds")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -71,7 +81,6 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
updateLeftStatus("1-1冷藏柜 -°C / -%")
|
||||
|
||||
initList()
|
||||
initRecyclerView()
|
||||
|
||||
lifecycleScope.launch {
|
||||
@@ -94,7 +103,7 @@ class HomeActivity : BaseActivity() {
|
||||
when (state) {
|
||||
is UiState.Loading -> {}
|
||||
is UiState.Success<*> -> getTokenSuccess(state.data)
|
||||
is UiState.Error -> UIUtils.toast(state.msg)
|
||||
is UiState.Error -> toast(state.msg)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
@@ -113,7 +122,8 @@ class HomeActivity : BaseActivity() {
|
||||
}
|
||||
TaskManager.startTask()
|
||||
|
||||
val androidId = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
|
||||
var androidId = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
|
||||
// androidId = "d0e7a2d5f25c775c"
|
||||
Log.d(TAG, "onCreate: androidId=${androidId}")
|
||||
App.getInstance().deviceId = androidId
|
||||
//"53babf69-0d2f-3875-a649-f2e12f80ad4c1"
|
||||
@@ -130,6 +140,29 @@ class HomeActivity : BaseActivity() {
|
||||
// receiveSerialPortData(data)
|
||||
// delay(500)
|
||||
// }
|
||||
// }
|
||||
|
||||
// lifecycleScope.launch {
|
||||
// repeat(100) {
|
||||
// val sb = StringBuilder().apply {
|
||||
//// 610200000000000001000000050000800000000006000000050000000400008006000000010000001019008070180080
|
||||
// repeat(12) {
|
||||
// val num = (0..99).random()
|
||||
// val num2 = (0..99).random()
|
||||
// val num3 = (0..99).random()
|
||||
// val num4 = (0..1).random()
|
||||
// val numStr = if (num <= 9) "0${num}" else "" + num
|
||||
// val numStr2 = if (num2 <= 9) "0${num2}" else "" + num2
|
||||
// val numStr3 = if (num3 <= 9) "0${num3}" else "" + num3
|
||||
// val numStr4 = if (num4 == 1) "80" else "00"
|
||||
// append(numStr).append(numStr2).append(numStr3).append(numStr4)
|
||||
// }
|
||||
// }
|
||||
// val data =
|
||||
// "${HEADER}0302000000000C${sb}5037414645333633333334333731373056322E313069${FOOTER}"
|
||||
// receiveSerialPortData(data)
|
||||
// delay(500)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -148,19 +181,20 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun updateUI(data: RespData<*>) {
|
||||
binding.include?.root?.gone()
|
||||
Loading.dismiss()
|
||||
if (data.result !is ShelfResult) {
|
||||
UIUtils.toast("数据错误")
|
||||
loadEmptyView()
|
||||
return
|
||||
}
|
||||
App.getInstance().canteenId = data.result.canteenId
|
||||
val tempList = data.result.containerGoodsList
|
||||
if (tempList.isNullOrEmpty()) {
|
||||
UIUtils.toast("数据为空")
|
||||
loadEmptyView()
|
||||
return
|
||||
}
|
||||
if (tempList.size < 10) {
|
||||
UIUtils.toast("数据错误")
|
||||
toast("数据错误")
|
||||
return
|
||||
}
|
||||
list.clear()
|
||||
@@ -175,7 +209,8 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
private fun showError(message: String) {
|
||||
Loading.dismiss()
|
||||
UIUtils.toast(message)
|
||||
toast(message)
|
||||
loadEmptyView()
|
||||
}
|
||||
|
||||
private val serialReader by lazy { StringBuilder() }
|
||||
@@ -199,7 +234,7 @@ class HomeActivity : BaseActivity() {
|
||||
val endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
serialReader.append(srcData.substring(0, endIndex))
|
||||
Log.d(TAG, "receiveSerialPortData:serialReader: $serialReader")
|
||||
data = serialReader.toString().replace(",","")
|
||||
data = serialReader.toString().replace(",", "")
|
||||
}
|
||||
|
||||
val cmd = data.substring(HEADER.length, HEADER.length + 4)
|
||||
@@ -215,10 +250,10 @@ class HomeActivity : BaseActivity() {
|
||||
// heartBeat(data)
|
||||
// }
|
||||
|
||||
// "0302" -> {
|
||||
// //获取设备状态
|
||||
// getDeviceInfo(data)
|
||||
// }
|
||||
"0302" -> {
|
||||
//获取设备状态
|
||||
getDeviceInfo(data)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
@@ -262,13 +297,16 @@ class HomeActivity : BaseActivity() {
|
||||
substring(6, 8) + substring(4, 6) + substring(2, 4) + substring(0, 2)
|
||||
}
|
||||
var realWeight = 0
|
||||
if (weightHex.first() in '8'..'F') {
|
||||
//负数
|
||||
val weightHex2 = "0${weightHex.substring(1)}"
|
||||
realWeight = -1 * weightHex2.toInt()
|
||||
} else {
|
||||
//整数
|
||||
var firstByteBinary = hexToBinary(weightHex.substring(0, 2))
|
||||
if (firstByteBinary.startsWith("0")) {
|
||||
//正数
|
||||
realWeight = weightHex.toInt()
|
||||
} else {
|
||||
//负数
|
||||
firstByteBinary = "0${firstByteBinary.substring(1)}"
|
||||
val firstByteHex = binaryToHex(firstByteBinary)
|
||||
weightHex = firstByteHex + weightHex.substring(2)
|
||||
realWeight = -1 * weightHex.toInt()
|
||||
}
|
||||
val realWeightDouble = realWeight / 1000.0
|
||||
weightArray.put(index, realWeightDouble)
|
||||
@@ -287,27 +325,33 @@ class HomeActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private fun getDeviceInfo(data: String) {
|
||||
// val weightStartIndex = HEADER.length + 4 + 10
|
||||
// val temperatureStartIndex = weightStartIndex + 12 * 8
|
||||
// val temperatureEndIndex = temperatureStartIndex + 2
|
||||
// val temperatureHex = data.substring(temperatureStartIndex, temperatureEndIndex)
|
||||
// val temperature = hexToDec(temperatureHex)
|
||||
// updateLeftStatus("1-1冷藏柜 $temperature°C / 87%")
|
||||
//
|
||||
// getWeightInfo(
|
||||
// start = weightStartIndex,
|
||||
// end = temperatureStartIndex,
|
||||
// data = data
|
||||
// )
|
||||
//
|
||||
// val intent = Intent(ShelfActivity.RECEIVER_DEVICE_INFO)
|
||||
// intent.putExtra(ShelfActivity.SHELF_WEIGHT, weightArray[clickIndex])
|
||||
// intent.putExtra(ShelfActivity.RECEIVER_DEVICE_INFO, data)
|
||||
// sendBroadcast(intent)
|
||||
Log.d(TAG, "getDeviceInfo: data=$data")
|
||||
val weightStartIndex = HEADER.length + 14
|
||||
val temperatureStartIndex = weightStartIndex + 12 * 8
|
||||
val temperatureEndIndex = temperatureStartIndex + 2
|
||||
val temperatureHex = data.substring(temperatureStartIndex, temperatureEndIndex)
|
||||
val temperature = hexToDec(temperatureHex)
|
||||
val tempC = f2C(temperature.toDouble())
|
||||
val showTemp = "%.1f".format(tempC)
|
||||
|
||||
val percent = 10 * list.count { it.goodsName.isNullOrBlank().not() }
|
||||
|
||||
updateLeftStatus("1-1冷藏柜 ${showTemp}°C / ${percent}%")
|
||||
|
||||
getWeightInfo(
|
||||
start = weightStartIndex,
|
||||
end = temperatureStartIndex,
|
||||
data = data
|
||||
)
|
||||
|
||||
if (list.isNotEmpty()) {
|
||||
val intent = Intent(ShelfActivity.RECEIVER_DEVICE_INFO + list[shelfIndex].deviceNo)
|
||||
intent.putExtra(ShelfActivity.SHELF_WEIGHT, weightArray[shelfIndex])
|
||||
sendBroadcast(intent)
|
||||
}
|
||||
}
|
||||
|
||||
private val weightArray by lazy { SparseArray<Double?>() }
|
||||
private var clickIndex = 0
|
||||
private var shelfIndex = 0
|
||||
|
||||
override fun onDestroy() {
|
||||
lifecycleScope.launch {
|
||||
@@ -319,10 +363,9 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private val shelfAdapter by lazy {
|
||||
// val list = viewModel.getCurrentItems()
|
||||
ShelfAdapter(list).apply {
|
||||
setOnDebouncedItemClick { adapter, view, position ->
|
||||
this@HomeActivity.clickIndex = position
|
||||
this@HomeActivity.shelfIndex = position
|
||||
lifecycleScope.launch {
|
||||
val openCmd = if (list[position].deviceNo in 1..5)
|
||||
LEFT_SHELF_OPEN_CMD
|
||||
@@ -330,7 +373,7 @@ class HomeActivity : BaseActivity() {
|
||||
RIGHT_SHELF_OPEN_CMD
|
||||
val openState = SerialPortManager.send(openCmd)
|
||||
if (openState.not()) {
|
||||
UIUtils.toast("${list[position].goodsName}柜门开启失败")
|
||||
toast("${list[position].goodsName}柜门开启失败")
|
||||
return@launch
|
||||
}
|
||||
launch(Intent(this@HomeActivity, ShelfActivity::class.java).also {
|
||||
@@ -358,26 +401,15 @@ class HomeActivity : BaseActivity() {
|
||||
layoutManager =
|
||||
GridLayoutManager(this@HomeActivity, 2, GridLayoutManager.VERTICAL, false)
|
||||
adapter = shelfAdapter
|
||||
|
||||
itemAnimator.let {
|
||||
if (it is DefaultItemAnimator) {
|
||||
it.supportsChangeAnimations = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initList() {
|
||||
//// val list: MutableList<ShelfModel> = mutableListOf()
|
||||
// list.add(ShelfModel(deviceNo = 1))
|
||||
// list.add(ShelfModel(deviceNo = 6))
|
||||
// list.add(ShelfModel(deviceNo = 2))
|
||||
// list.add(ShelfModel(deviceNo = 7))
|
||||
// list.add(ShelfModel(deviceNo = 3))
|
||||
// list.add(ShelfModel(deviceNo = 8))
|
||||
// list.add(ShelfModel(deviceNo = 4))
|
||||
// list.add(ShelfModel(deviceNo = 9))
|
||||
// list.add(ShelfModel(deviceNo = 5))
|
||||
// list.add(ShelfModel(deviceNo = 10))
|
||||
//// viewModel.updateItems(list)
|
||||
}
|
||||
|
||||
private val MM_DD_EEEE__HH_MM_SS = "MM月dd日 EEEE HH:mm:ss"
|
||||
|
||||
private fun updateDateTime() {
|
||||
val sdf = SimpleDateFormat(MM_DD_EEEE__HH_MM_SS, Locale.CHINA)
|
||||
val dateTime = sdf.format(Date())
|
||||
@@ -402,4 +434,19 @@ class HomeActivity : BaseActivity() {
|
||||
super.onPause()
|
||||
handler.removeCallbacks(updateTask)
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadEmptyView() {
|
||||
list.clear()
|
||||
shelfAdapter.notifyDataSetChanged()
|
||||
|
||||
binding.include?.let {
|
||||
it.root.visible()
|
||||
it.root.setOnClickListener {
|
||||
viewModel.getAccessToken(App.getInstance().deviceId)
|
||||
}
|
||||
it.ivEmptyIcon.setImageResource(R.drawable.ic_empty_white)
|
||||
it.tvEmptyContent.setTextColor(Color.WHITE)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
@@ -30,11 +31,12 @@ import com.shuwei.intelligent.shelves.net.UiState
|
||||
import com.shuwei.intelligent.shelves.serial.SerialPortManager
|
||||
import com.shuwei.intelligent.shelves.utils.DateTimeUtil
|
||||
import com.shuwei.intelligent.shelves.utils.KeyboardUtil
|
||||
import com.shuwei.intelligent.shelves.utils.UIUtils
|
||||
import com.shuwei.intelligent.shelves.utils.ext.addOnActionSearchListener
|
||||
import com.shuwei.intelligent.shelves.utils.ext.clickWithDebounce
|
||||
import com.shuwei.intelligent.shelves.utils.ext.gone
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toJsonString
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
import com.shuwei.intelligent.shelves.utils.ext.visible
|
||||
import kotlinx.coroutines.launch
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
@@ -45,11 +47,14 @@ class ShelfActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "ShelfActivity"
|
||||
|
||||
private const val YYYY_MM_DD__EEEE_HH_MM_SS = "yyyy年MM月dd日 EEEE***HH:mm:ss"
|
||||
const val SHELF_MODEL = "shelfModel"
|
||||
const val RECEIVER_DEVICE_INFO = "receiverDeviceInfo"
|
||||
const val SHELF_WEIGHT = "shelfWeight"
|
||||
const val SHELF_INDEX = "shelfIndex"
|
||||
|
||||
const val PAGE_SIZE = 50
|
||||
const val PAGE_SIZE = 100
|
||||
}
|
||||
|
||||
private lateinit var binding: ActivityShelfBinding
|
||||
@@ -60,6 +65,7 @@ class ShelfActivity : BaseActivity() {
|
||||
|
||||
private var realWeight: Int = 0
|
||||
private var pageNo: Int = 1
|
||||
private var shelfIndex: Int = 0
|
||||
|
||||
private val viewModel: NetViewModel by viewModels()
|
||||
|
||||
@@ -81,19 +87,23 @@ class ShelfActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
initRecyclerView()
|
||||
// initWeight()
|
||||
|
||||
binding.etInputFood.run {
|
||||
addOnActionSearchListener {
|
||||
if (text.isNullOrBlank()) {
|
||||
toast(hint.toString())
|
||||
return@addOnActionSearchListener
|
||||
}
|
||||
// loadSearchData()
|
||||
viewModel.getGoodsList(
|
||||
canteenId = "1599670511042785282", goodsName = text.toString().trim()
|
||||
)
|
||||
pageNo = 1
|
||||
getGoodsList()
|
||||
KeyboardUtil.hideKeyboard(context, this)
|
||||
}
|
||||
addTextChangedListener(afterTextChanged = {editable ->
|
||||
if (editable.isNullOrBlank()) {
|
||||
pageNo = 1
|
||||
getGoodsList()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
binding.btnConfirm.clickWithDebounce {
|
||||
@@ -103,7 +113,7 @@ class ShelfActivity : BaseActivity() {
|
||||
}
|
||||
val data = ShelfModel(
|
||||
shelfName = shelfModel?.shelfName,
|
||||
goodsId = list[clickIndex].goodsId?:"",
|
||||
goodsId = list[clickIndex].goodsId ?: "",
|
||||
goodsName = list[clickIndex].goodsName,
|
||||
weight = realWeight / 1000.0,
|
||||
createTime = DateTimeUtil.formatDateTime(dateTime = Date())
|
||||
@@ -128,6 +138,8 @@ class ShelfActivity : BaseActivity() {
|
||||
//清零
|
||||
realWeight = 0
|
||||
binding.tvFoodWeight.text = "${realWeight}克"
|
||||
|
||||
SerialPortManager.send(DEVICE_INFO_CMD)
|
||||
}
|
||||
KeyboardUtil.hideKeyboard(v.context, v)
|
||||
}
|
||||
@@ -147,7 +159,7 @@ class ShelfActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
registerReceiver(receiver, IntentFilter(RECEIVER_DEVICE_INFO))
|
||||
registerReceiver(receiver, IntentFilter(RECEIVER_DEVICE_INFO + shelfModel?.deviceNo))
|
||||
|
||||
binding.refreshLayout.let {
|
||||
it.setEnableRefresh(true)
|
||||
@@ -176,7 +188,10 @@ class ShelfActivity : BaseActivity() {
|
||||
|
||||
private fun getGoodsList() {
|
||||
viewModel.getGoodsList(
|
||||
canteenId = App.getInstance().canteenId, pageNo = pageNo, pageSize = PAGE_SIZE
|
||||
canteenId = App.getInstance().canteenId,
|
||||
goodsName = binding.etInputFood.text.trim().toString(),
|
||||
pageNo = pageNo,
|
||||
pageSize = PAGE_SIZE
|
||||
)
|
||||
}
|
||||
|
||||
@@ -186,15 +201,20 @@ class ShelfActivity : BaseActivity() {
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun updateUI(data: RespData<*>) {
|
||||
binding.include?.root?.gone()
|
||||
finishRefresh()
|
||||
Loading.dismiss()
|
||||
binding.root.postDelayed({ Loading.dismiss() }, 200)
|
||||
Log.d(TAG, "updateUI: ${data.toJsonString()}")
|
||||
if (data.result !is GoodsRecord) {
|
||||
UIUtils.toast("数据错误")
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
return
|
||||
}
|
||||
if (data.result.records.isNullOrEmpty()) {
|
||||
UIUtils.toast("数据错误")
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
return
|
||||
}
|
||||
if (pageNo == 1) {
|
||||
@@ -213,15 +233,18 @@ class ShelfActivity : BaseActivity() {
|
||||
private fun showError(message: String) {
|
||||
finishRefresh()
|
||||
Loading.dismiss()
|
||||
UIUtils.toast(message)
|
||||
toast(message)
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
}
|
||||
|
||||
private val receiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
intent?.let {
|
||||
val data = it.getStringExtra(RECEIVER_DEVICE_INFO)
|
||||
Log.d(TAG, "onReceive: $data")
|
||||
// val data = it.getStringExtra(RECEIVER_DEVICE_INFO)
|
||||
val weight = it.getDoubleExtra(SHELF_WEIGHT, 0.0)
|
||||
Log.d(TAG, "getDeviceInfo:onReceive: weight=$weight")
|
||||
realWeight = (weight * 1000).toInt()
|
||||
binding.tvFoodWeight.text = "${realWeight}克"
|
||||
}
|
||||
@@ -233,31 +256,6 @@ class ShelfActivity : BaseActivity() {
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
// private fun initWeight() {
|
||||
// realWeight = Random.nextInt(1, 5001)
|
||||
// }
|
||||
|
||||
// private fun loadSearchData() {
|
||||
// list.add(SearchModel(foodId = 1000, foodName = "菲律宾乳猪五花肉"))
|
||||
// list.add(SearchModel(foodId = 1001, foodName = "金针菇"))
|
||||
// list.add(SearchModel(foodId = 1002, foodName = "大菠菜"))
|
||||
// list.add(SearchModel(foodId = 1003, foodName = "清远麻鸡块"))
|
||||
// list.add(SearchModel(foodId = 1004, foodName = "普罗旺斯番茄"))
|
||||
// list.add(SearchModel(foodId = 1005, foodName = "长条茄子"))
|
||||
// list.add(SearchModel(foodId = 1006, foodName = "得莫利鱼"))
|
||||
// list.add(SearchModel(foodId = 1007, foodName = "土豆丝"))
|
||||
// list.add(SearchModel(foodId = 1008, foodName = "辣椒炒肉"))
|
||||
// list.add(SearchModel(foodId = 1009, foodName = "雪菜烧豆腐"))
|
||||
// list.add(SearchModel(foodId = 1010, foodName = "冬虫夏草炝拌芥兰苗"))
|
||||
// list.add(
|
||||
// SearchModel(
|
||||
// foodId = 1011,
|
||||
// foodName = "蘑菇玉米山药莲藕胡萝卜红枣莲子枸杞清炖排骨汤"
|
||||
// )
|
||||
// )
|
||||
// searchAdapter.notifyDataSetChanged()
|
||||
// }
|
||||
|
||||
private val list: MutableList<GoodsModel> = mutableListOf()
|
||||
private val searchAdapter by lazy {
|
||||
SearchAdapter(list).apply {
|
||||
@@ -279,8 +277,6 @@ class ShelfActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private val YYYY_MM_DD__EEEE_HH_MM_SS = "yyyy年MM月dd日 EEEE***HH:mm:ss"
|
||||
|
||||
private fun updateDateTime() {
|
||||
val sdf = SimpleDateFormat(YYYY_MM_DD__EEEE_HH_MM_SS, Locale.CHINA)
|
||||
val dateTime = sdf.format(Date())
|
||||
@@ -308,4 +304,22 @@ class ShelfActivity : BaseActivity() {
|
||||
handler.removeCallbacks(updateTask)
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadEmptyView() {
|
||||
list.clear()
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
binding.include?.let {
|
||||
it.root.visible()
|
||||
it.root.setOnClickListener {
|
||||
pageNo = 1
|
||||
getGoodsList()
|
||||
}
|
||||
it.ivEmptyIcon.setImageResource(R.drawable.ic_empty_gray)
|
||||
}
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(false)
|
||||
setEnableLoadMore(false)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -45,3 +45,49 @@ fun byteArrayToHexString(bytes: ByteArray): String {
|
||||
fun String.hexToBytes(): ByteArray = hexStringToByteArray(this)
|
||||
fun ByteArray.toHexString2(): String = byteArrayToHexString(this)
|
||||
|
||||
fun hexToBinary(hex: String): String {
|
||||
val hexToBinaryMap = mapOf(
|
||||
'0' to "0000", '1' to "0001", '2' to "0010", '3' to "0011",
|
||||
'4' to "0100", '5' to "0101", '6' to "0110", '7' to "0111",
|
||||
'8' to "1000", '9' to "1001", 'A' to "1010", 'B' to "1011",
|
||||
'C' to "1100", 'D' to "1101", 'E' to "1110", 'F' to "1111"
|
||||
)
|
||||
|
||||
return hex.map { char ->
|
||||
hexToBinaryMap[char] ?: throw IllegalArgumentException("非法十六进制字符: $char")
|
||||
}.joinToString("")
|
||||
}
|
||||
|
||||
fun binaryToHex(binary: String): String {
|
||||
// 补齐到4的倍数长度(方便分组)
|
||||
val paddedBinary = binary.padStart(
|
||||
length = ((binary.length + 3) / 4) * 4,
|
||||
padChar = '0'
|
||||
)
|
||||
|
||||
// 每4位二进制对应1位十六进制
|
||||
return paddedBinary.chunked(4).joinToString("") { nibble ->
|
||||
when (nibble) {
|
||||
"0000" -> "0"
|
||||
"0001" -> "1"
|
||||
"0010" -> "2"
|
||||
"0011" -> "3"
|
||||
"0100" -> "4"
|
||||
"0101" -> "5"
|
||||
"0110" -> "6"
|
||||
"0111" -> "7"
|
||||
"1000" -> "8"
|
||||
"1001" -> "9"
|
||||
"1010" -> "A"
|
||||
"1011" -> "B"
|
||||
"1100" -> "C"
|
||||
"1101" -> "D"
|
||||
"1110" -> "E"
|
||||
"1111" -> "F"
|
||||
else -> throw IllegalArgumentException("无效的二进制段: $nibble")
|
||||
}
|
||||
}
|
||||
.trimStart('0') // 去除前导零
|
||||
.ifEmpty { "0" } // 处理全零情况
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
package com.shuwei.intelligent.shelves.utils
|
||||
|
||||
import android.widget.Toast
|
||||
import com.shuwei.intelligent.shelves.App
|
||||
//D6DADEDB0302000001000C06
|
||||
object UIUtils {
|
||||
fun toast(strRes: Int) {
|
||||
Toast.makeText(App.getInstance(), strRes, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
fun toast(str: String) {
|
||||
Toast.makeText(App.getInstance(), str, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
@@ -17,4 +17,12 @@
|
||||
android:layout_marginEnd="6dp"
|
||||
tools:listitem="@layout/list_item_shelf"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/include"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
layout="@layout/layout_empty_view"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -156,37 +156,50 @@
|
||||
android:textSize="15sp"
|
||||
tools:ignore="Autofill,HardcodedText,TextFields" />
|
||||
</LinearLayout>
|
||||
<com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||
android:id="@+id/refreshLayout"
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.scwang.smart.refresh.header.ClassicsHeader
|
||||
<com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||
android:id="@+id/refreshLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvSearch"
|
||||
<com.scwang.smart.refresh.header.ClassicsHeader
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvSearch"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:clipToPadding="false"
|
||||
android:overScrollMode="never"
|
||||
tools:listitem="@layout/list_item_search"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:spanCount="2"
|
||||
tools:itemCount="10"/>
|
||||
|
||||
<com.scwang.smart.refresh.footer.ClassicsFooter
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/include"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:clipToPadding="false"
|
||||
android:overScrollMode="never"
|
||||
tools:listitem="@layout/list_item_search"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:spanCount="2"
|
||||
tools:itemCount="10"/>
|
||||
|
||||
<com.scwang.smart.refresh.footer.ClassicsFooter
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
|
||||
layout="@layout/layout_empty_view"
|
||||
android:visibility="gone"/>
|
||||
</FrameLayout>
|
||||
|
||||
<!-- android:layout_marginTop="48dp"-->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="MissingDefaultResource,UseCompoundDrawables">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivEmptyIcon"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_empty_gray"
|
||||
android:adjustViewBounds="true"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvEmptyContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/black999"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textSize="20sp"
|
||||
android:text="暂无数据"
|
||||
tools:ignore="HardcodedText" />
|
||||
</LinearLayout>
|
||||
@@ -159,6 +159,7 @@
|
||||
<com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||
android:id="@+id/refreshLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
@@ -172,7 +173,6 @@
|
||||
android:layout_height="match_parent"
|
||||
android:paddingStart="36dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingEnd="36dp"
|
||||
android:clipToPadding="false"
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="MissingDefaultResource,UseCompoundDrawables">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivEmptyIcon"
|
||||
android:layout_width="270dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_empty_gray"
|
||||
android:adjustViewBounds="true"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvEmptyContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/black999"
|
||||
android:layout_marginTop="60dp"
|
||||
android:textSize="60sp"
|
||||
android:text="暂无数据"
|
||||
tools:ignore="HardcodedText" />
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user