function - Android Studio 说当我调用 kotlin 代码中较低的函数时出现错误,我是否设置错误
问题描述
Android Studio 说当我调用 kotlin 代码中较低的函数时出现“未解决的参考:连接”错误,我是否设置了错误。只要函数在调用之上,它就可以工作,但是,我不能在代码中调用更低的函数,就像它是单通道编译器一样。con=connect() 下面会导致错误,但是,我有一个相同的调用,其中代码位于函数下方并且工作正常。
class MainActivity() : AppCompatActivity() {
private val handler= Handler()
private enum class UsbPermission {
Unknown, Requested, Granted, Denied
}
lateinit var _usbManager: UsbManager
// lateinit var device: UsbDevice
//private val _context: Context = context
// private var _errorMessage: String = ""
private var _connected: Boolean = false
// private var _deviceName: String = ""
// private var _device: UsbDevice? = null
private lateinit var _serial: UsbSerialPort
// private var _receiveBuffer = Vector<Byte>()
private val withIoManager = false
private var broadcastReceiver: BroadcastReceiver? = null
// private var mainLooper: Handler? = null
// private val receiveText: TextView? = null
// private val controlLines: ControlLines? = null
private var usbIoManager: SerialInputOutputManager? = null
// val device: UsbDevice? = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
// private val usbSerialPort: UsbSerialPort? = null
private var usbPermission: UsbPermission = UsbPermission.Unknown
private val INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB"
// private val WRITE_WAIT_MILLIS = 2000
// private val READ_WAIT_MILLIS = 2000
// private val ACTION_USB_PERMISSIONs = "com.android.example.USB_PERMISSION"
val ACTION_USB_PERMISIION = "permission"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.requestFeature(Window.FEATURE_NO_TITLE)
window.setFlags(
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
)
setContentView(R.layout.activity_main)
_usbManager = getSystemService(USB_SERVICE) as UsbManager
// val deviceList = _usbManager.getDeviceList()
// val device = deviceList.get("deviceName")
// val permissionIntent = PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSIONs), 0)
// _usbManager.requestPermission(device, permissionIntent)
val filter = IntentFilter()
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED)
filter.addAction(ACTION_USB_PERMISIION)
registerReceiver(broadcastReceiver, filter)
我在上面添加了从串行示例程序中获得的类装饰,也许我定义它的方式有问题。
val ctson = Runnable {
if (con == true) {
_serial.setRTS(true)
}
}
val mListener: Listener =
object : Listener {
override fun onNewData(data: ByteArray) {
// mainLooper.post(() -> {
if (efitable == 1) {
for (i in 0 until data.size) table[len + i] = data[i] //fuel table
len = len + data.size
// _serial.setRTS(false)
//len = receive(387, 400)
if (len >= 8187) { // && efitable==1) {
_serial.setRTS(false)
efichk = 0
len = 0
for (i in 0 until 8184) efichk = efichk + (table[i].toInt() and 0xFF)
efichk = (efichk and 0xFFFF)
chktst =
(table[8185].toInt() and 0xFF shl 8 or (table[8184].toInt() and 0xFF)).toInt()
if (efichk == chktst) {
efitable = 2
etable(table) //extract data from table
_serial.write("R".toByteArray(), 4)
_serial.setRTS(true)
sergo = 0
} else {
efitable = 0
_serial.purgeHwBuffers(true, true)
_serial.write("R".toByteArray(), 4)
_serial.setRTS(true)
sergo = 0
}
}
} else { //if(efitable==0 || efitable==2){
for (i in 0 until data.size) rsdash[len + i] = data[i]
len = len + data.size
if (len >= 387) { // && (efitable==0 || efitable==2)) {
_serial.setRTS(false)
len = 0
chksum = 0
for (i in 0 until 384) chksum = chksum + (rsdash[i].toInt() and 0xFF)
chksum = (chksum and 0xFFFF)
chktst =
(rsdash[385].toInt() and 0xFF shl 8 or (rsdash[384].toInt() and 0xFF)).toInt()
if (chksum == chktst) {
if (efitable == 0) {
efitable = 1
sergo = 20
_serial.write("X".toByteArray(), 4) //88
display(rsdash)
_serial.setRTS(true)
} else {
if (save == 2) {
_serial.write("U".toByteArray(), 4) //85
efichk = 0
for (i in 0 until 8184) efichk =
efichk + (table[i].toInt() and 0xFF)
table[8184] = (efichk and 0xFF0000 shr 16).toByte()
table[8185] = (efichk and 0xFF00 shr 8).toByte()
table[8186] = (efichk and 0xFF).toByte()
_serial.write(table, 1200) //85
efichk = (efichk and 0xFFFF)
save = 0
_serial.setRTS(true)
} else {
_serial.write("R".toByteArray(), 4) //82
if (exit > 1) {
sergo = 1
if (con == true) {
_serial.setRTS(false)
_serial.close()
_connected = false
con = false
}
} else {
display(rsdash)
handler.postDelayed(ctson, 37)
sergo = 0
}
}
}
} else {
_serial.write("R".toByteArray(), 4)
for (i in 0 until 100) Thread.sleep(1)
_serial.purgeHwBuffers(true, true)
_serial.setRTS(true)
_serial.purgeHwBuffers(true, true)
}
}
}
// })
}
override fun onRunError(e: Exception) {
len = 0
if (con == true) {
_serial.setRTS(false)
_serial.close()
_connected = false
con = false
con = connect() //This line causes the "Unresolved reference: connect" error
}
/* _serial.setRTS(false) // original code to try to recover serial port
_serial.write("R".toByteArray(), 4)
len = 0
for (i in 0 until 120) Thread.sleep(1)
_serial.purgeHwBuffers(true, true)
_serial.setRTS(true)
*/
}
fun connect(): Boolean {
val drivers = UsbSerialProber.getDefaultProber().findAllDrivers(_usbManager)
if (drivers.isEmpty()) {
return false
}
val driver = drivers[0]
val _connection = _usbManager.openDevice(driver.device)
if (_connection == null) {
_connected = false
return false
}
val port = driver.ports[0]
if (port == null) {
_connected = false
return false
}
try {
port.open(_connection)
port.setParameters(
115200,
8,
UsbSerialPort.STOPBITS_1,
UsbSerialPort.PARITY_NONE
)
port.purgeHwBuffers(true, true)
_serial = port
_connected = true
// if (withIoManager) {
// usbIoManager = SerialInputOutputManager(usbSerialPort)
// Executors.newSingleThreadExecutor().submit(usbIoManager)
// }
//usbIoManager = SerialInputOutputManager(_serial,this)
usbIoManager = SerialInputOutputManager(_serial, mListener)
Executors.newSingleThreadExecutor().submit(usbIoManager)
// val submit = Executors.newSingleThreadExecutor().submit(usbIoManager)
// Executors.newSingleThreadExecutor().asCoroutineDispatcher(usbIoManager)
_serial.setRTS(true)
return true
} catch (e: IOException) {
//e.printStackTrace()
if(_connected==true){port.close()}
_connected = false
return false
}
}
// mainLooper = Handler(Looper.getMainLooper())
broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == INTENT_ACTION_GRANT_USB) {
usbPermission = if (intent.getBooleanExtra(
UsbManager.EXTRA_PERMISSION_GRANTED,
false
)
) UsbPermission.Granted else UsbPermission.Denied
con=connect()
}
}
}
//mainLooper = Handler(Looper.getMainLooper())
解决方案
您的 KotlinRuntime 库似乎未附加到项目中。在“项目结构”下查看如果存在,您可以尝试将其删除,然后运行“工具 - > Kotlin - > 在项目中配置 Kotlin”
推荐阅读
- git - 如何强制 git 始终从 master 分支?
- javascript - 如何在 .jsx 文件中使用 React.js 突出显示页面中的代码行?
- c# - 查找哪些单元格应用了下拉过滤器 - Interop Excel
- angular - 从字符串中提取特定值
- c# - 设置过大的 MaxJsonDeserializerMembers 有什么安全风险?
- ruby-on-rails - 在 Rubymine 中运行 rails 时找不到图像
- python - 使用名为“pk”的 URL 关键字参数调用的预期视图 ShowImageList
- php - 如何在 php 单元测试中模拟日期?
- audio - 什么是音频 PCM 的帧同步字来识别开始位置
- python - python中整数除法和float到int转换之间差异的原因是什么?