- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Activity.runOnUiThread(Runnable),但 Android Studio 似乎认为该函数不存在。我已确保“android.app.Activity”已导入。
我正在尝试使用线程连接到蓝牙设备并读取数据。我已经列出了配对的设备,然后单击其中一个配对设备将我带到第二个屏幕,然后我可以在其中连接/断开所选设备的套接字。连接和断开连接正常。
我现在正试图将数据流从 readThread 内部类发送回 UI 线程,但我无法让 runOnUiThread 工作。无论我做什么 runOnUiThread 都无法识别。
package com.example.idxdatalogger
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothSocket
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.util.Log
import android.view.View
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_second.*
import java.io.IOException
import java.io.InputStream
import java.util.*
class SecondActivity : AppCompatActivity() {
var btAdapter: BluetoothAdapter? = null
var data = arrayListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
btAdapter = BluetoothAdapter.getDefaultAdapter()
val position = (intent.getStringExtra("position"))!!.toInt()
val uuid = UUID.fromString(intent.getStringExtra("UUID"))
//textView.text = position.toString()
//textView2.text = uuid.toString()
val pairedDevices: Set<BluetoothDevice> = btAdapter!!.bondedDevices
btDeviceLabel.text = pairedDevices.elementAt(position).name.toString()
var inStream = connectStream(uuid, position, pairedDevices.elementAt(position), btAdapter)
conStat(inStream)
connectButton.setOnClickListener {
inStream.start()
conStat(inStream)
}
cancelButton.setOnClickListener {
inStream.cancel()
conStat(inStream)
inStream = connectStream(uuid, position, pairedDevices.elementAt(position), btAdapter)
}
}
/*
change text and button visiblity for connect/disconnect buttons
*/
fun conStat(inStream: connectStream) {
if (inStream.socket!!.isConnected) {
socketStatus.text = getString(R.string.connectionOpened)
connectButton.visibility = View.INVISIBLE
cancelButton.visibility = View.VISIBLE
} else {
socketStatus.text = getString(R.string.connectionClosed)
connectButton.visibility = View.VISIBLE
cancelButton.visibility = View.INVISIBLE
}
}
class connectStream(
private val uuid: UUID,
private val position: Int,
private val device: BluetoothDevice,
private val adapter: BluetoothAdapter?
) : Thread() {
val socket: BluetoothSocket? = device.createRfcommSocketToServiceRecord(uuid)
override fun run() {
adapter?.cancelDiscovery()
try {
socket?.connect()
manageConnection().readThread(socket!!).start()
} catch (e: IOException) {
Log.i("SOCKET: ", "Failed to connect")
Log.i("UUID: ", uuid.toString())
Log.i("Device: ", device.name)
Log.i("Address: ", device.address)
}
}
fun cancel() {
try {
socket?.close()
} catch (e: IOException) {
Log.i("SOCKET: ", "Could not close socket")
}
}
}
class manageConnection() {
private val MESSAGE_READ: Int = 0
inner class readThread(socket: BluetoothSocket) : Thread() {
private val inStream: InputStream = socket.inputStream
private val inBuffer: ByteArray = ByteArray(1024)
override fun run() {
var readBytes: Int
while (true) {
readBytes = try { inStream.read(inBuffer)
} catch (e: IOException) {
Log.d("IN_STREAM: ", "Input stream disconnected")
break
}
SecondActivity.runOnUiThread(Runnable {
})
}
}
}
}
}
package com.example.idxdatalogger
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothSocket
import android.util.Log
import android.view.View
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.*
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_second.*
import java.io.IOException
import java.io.InputStream
import java.util.*
/*
*/
class SecondActivity : AppCompatActivity() {
var btAdapter: BluetoothAdapter? = null
var data = arrayListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
btAdapter = BluetoothAdapter.getDefaultAdapter()
val position = (intent.getStringExtra("position"))!!.toInt()
val uuid = UUID.fromString(intent.getStringExtra("UUID"))
val pairedDevices: Set<BluetoothDevice> = btAdapter!!.bondedDevices
val device = pairedDevices.elementAt(position)
btDeviceLabel.text = pairedDevices.elementAt(position).name.toString()
val socket: BluetoothSocket? = device.createRfcommSocketToServiceRecord(uuid)
//var inStream = connectStream(uuid, position, pairedDevices.elementAt(position), btAdapter)
conStat(socket!!)
val inStream: InputStream = socket.inputStream
val inBuffer: ByteArray = ByteArray(1024)
var readBytes : Int
connectButton.setOnClickListener {
//connect to device
Thread(Runnable {
kotlin.run {
btAdapter?.cancelDiscovery()
try {
socket.connect()
runOnUiThread(Runnable { conStat(socket) })
//read stream
Thread(Runnable{
while(true) {
readBytes = try {
inStream.read(inBuffer)
} catch (e: IOException) {
Log.d("IN_STREAM: ", "input stream disconnected")
break
}
//return stream information to UI thread
runOnUiThread(Runnable {
data.add(inBuffer.toString())
dataList.adapter = dataListAdapter(this,data)
dataList.visibility = View.VISIBLE
})
}
}).start()
} catch (e: IOException) {
Log.i("SOCKET: ", "Failed to connect")
Log.i("UUID: ", uuid.toString())
Log.i("Device: ", pairedDevices.elementAt(position).name)
Log.i("Address: ", pairedDevices.elementAt(position).address)
}
}
}).start()
}
cancelButton.setOnClickListener {
//close socket connection
Thread(Runnable {
try {
socket.close()
} catch (e: IOException) {
Log.i("SOCKET: ", "Could not close socket")
}
runOnUiThread(Runnable {
conStat(socket)
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
})
}).start()
}
}
/*
change text and button visiblity for connect/disconnect buttons
*/
fun conStat(socket : BluetoothSocket) {
if (socket.isConnected) {
socketStatus.text = getString(R.string.connectionOpened)
connectButton.visibility = View.INVISIBLE
cancelButton.visibility = View.VISIBLE
} else {
socketStatus.text = getString(R.string.connectionClosed)
connectButton.visibility = View.VISIBLE
cancelButton.visibility = View.INVISIBLE
}
}
最佳答案
SecondActivity.runOnUiThread(...)
是不正确的,因为您正在调用一个类的方法和 runOnUiThread()
方法不是静态的。 您需要在实例上调用此方法 的 Activity
类,而不是类本身。
关于android-studio - Kotlin:runOnUiThread 未解决引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330607/
我将其添加到我的 build.gradle 文件中。 build.gradle compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' co
我按照 gamecodeschool.com 的教程制作了一个“Android 2D 滚动射击游戏”。 我遇到错误: "Cannot resolve symbol 'currentViewportWo
这是我的代码,createStoredProcedureQuery在eclipse下面有红线,并且没有解决,我尝试了很多方法仍然无法得到问题所在。 private static EntityManag
我正在 Xcode 6.1 中开发一个针对 iOS >= 7 的 Swift 应用程序,并且无法使用 NSStringDrawingUsesLineFragmentOrigin,因为它尚未解决。我用谷
使用 MSVC 2015 版本 14.0.25431.01 更新 3 .cpp 文件有 #include 项目属性中的 VC++ 包含路径是 $(VC_IncludePath);$(WindowsS
我使用 visual studio 2013 在 C 中编写程序,但出现此错误:MSVCRTD.lib(crtexe.obj):错误 LNK2019:函数 ___tmainCRTStartup 中引用
我正在编写一个更新到 Firebase 的应用程序,但我无法编写 oncancelled 函数,因为它无法解析符号 FirebaseError。 我的代码如下: package com.test.my
我不明白为什么这没有解决,有什么想法吗? “resolve this”确实会打印,但它永远不会回到 .then 中 promise 的解决方案。 var promise = wait(); promi
我在 eclipse/java 中使用 mapView 时遇到以下问题。 使用mapView.getOverlays()我收到错误。 mapView cannot be resolved 我尝试对 m
你能告诉我如何用两组 R.drawable.images 盗版创建 if - else 语句吗? 我已经尝试过,但我收到一个错误代码,提示 pirates is un-resolved。 Bitmap
我关注了this link大多数结果的答案给我的方法 setOnGroupExpandListener 无法解析。我是 android 的新手,目前主要通过查看其他人的做法并尝试向他们学习来做一些事情
import React from 'react'; // import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom/dist
我正在 eclipse(版本 3.6.2)中开发一个 android 应用程序,我刚刚添加了以下内容: 导入 android.webkit.GeolocationPermissions; 但是我得到一
我的网站上有多个视频需要播放()。当 play() 返回一个 Promise 时,我使用 Promise.all() 创建了一个小脚本,因此每个 Promise 都会等待其他 Promise。 try
我们将所有已编译的程序集复制到构建后步骤中的一个输出文件夹中 (d:\c\bin\assemblies)。使用 Windows 和 Microsoft .NET 框架,可以在编译时使用指向该输出文件夹
我有一个数据库查找查询,它返回 150k 个文档,其中每个文档包含三个整数字段和一个日期时间字段。以下代码尝试从游标对象创建列表。迭代光标非常慢——大约 80 秒!通过 C++ 驱动程序执行相同的操作
我想使用 View Pager2 实现 Carousel,像这样预览左右页面: 最初我使用的是支持的view pager1。现在我认为它被删除了 viewPagerhost.setPageMa
我正在 android 中启动基于 Ktor 的客户端,我想使用任何序列化程序,目前,来自 kotlinx 的序列化程序,但其他序列化程序的结果是相同的 - 未找到 JsonFeature(在下面的
我一直被一个 Unresolved 问题所困扰 'R_registerRoutines', 'R_useDynamicSymbols'来自 R CMD 检查的注释。我已经阅读了“Writing R E
我不确定,但我无法用我的生命来解决这个问题。它总是悬而未决。我不是最擅长 promise 的人,所以请帮助我。 export async function getQuotes() { const
我是一名优秀的程序员,十分优秀!