- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在摸索使用python for android jnius库从蓝牙RS232转换器获取数据。我原以为它会像 PySerial 库一样简单,但由于我还是 java 新手,所以实现是完全不同的。我很容易地创建了蓝牙连接,但是当我尝试读取或写入数据时,我得到一个 jnius.jnius.JavaException
那No methods matching your arguments,
以及可用于 read
的方法是:'()I', '([B)I', '([BII)I'
对于 write
是 '(I)V', '([B)V', '([BII)V'
.我尝试在开发人员 android 文档以及 DuckDuckGoing 中找到它,但不清楚。我也试过BufferedReader
使用 readLine()
的示例 ( Here )方法,但我不断收到错误:JavaException: JVM exception occurred: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference
.
有人可以将我指向文档以了解上述读写参数吗?
另外,请帮助我理解为什么 read, readLine() and write
对象不返回任何数据?
我调用的 Java 库:
BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter')
BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice')
BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket')
InputStreamReader = autoclass('java.io.InputStreamReader')
BufferedReader = autoclass('java.io.BufferedReader')
UUID = autoclass('java.util.UUID')
System = autoclass('java.lang.System')
def get_socket_stream(self, name):
paired_devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray()
self.rfsocket == None
for device in paired_devices:
if device.getName() == name:
if device.bluetoothEnabled:
if not device.connected:
self.rfsocket = device.createInsecureRfcommSocketToServiceRecord(
UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"))
self.reader = InputStreamReader(self.rfsocket.getInputStream(), 'LATIN-1')
recv_stream = BufferedReader(self.reader)
send_stream = self.rfsocket.getOutputStream()
break
print(self.rfsocket.getRemoteDevice().getName())
if self.rfsocket.port <= 0:
self.rfsocket = device.createRfcommSocket(1)
if not self.rfsocket.connected:
print('port two: ',self.rfsocket.port)
self.rfsocket.connect()
def GetBSerial(self):
self.messager('Trying Serial')
self.recv_stream, self.send_stream = self.get_socket_stream(devicename)
if not self.rfsocket.connected and self.recv_stream == None:
print("Get paired device failed")
else:
print('Initiating trigger')
self.weight_ticker()
def GetInput(self):
self.send_stream.write("Hallo\r\n")
self.send_stream.flush
if self.rfsocket.connected and self.recv_stream != None:
if self.weigh_tme > 0:
while self.recv_stream.ready != None:
try:
self.scale_output = self.recv_stream.readLine()
except jnius.jnius.JavaException as e:
print("JavaException: ", e, self.rfsocket.connected)
except ValueError as e:
print("Misc error: ", e)
try:
self.show_input(self.scale_output)
except ValueError:
pass
readLine()
的输入。方法不返回错误并返回字符串。我清理了一下,但代码差别不大。主要的事情是我检查了
device != None
和
if rfsocket.connected:
在我的事件循环中创建 getInputStream 之前,以免重新创建套接字对象。必须进行更多测试才能看到主要问题在哪里。仍然不知道
read
的论点是什么和
write
方法。
readLine()
方法间歇地返回字符串或根本不返回字符串,我的事件循环似乎不适用于
readLine()
方法。
readLine()
方法有一个奇怪的模式,在第一次阅读时它给了我
JavaException: JVM exception occurred: Attempt to invoke virtual method 'int java.io.InputStream.available()' on a null object reference
,随后的读取给了我一些预期的字符串或一个空字符串。当我使用 PySerial 通过硬线接收数据时,我返回了类似的字符串位和 fragment 。解决方案是重置输入缓冲区。上面的java库中是否有类似的东西?
BufferedInputStream
图书馆并得到相同的结果,没有更多的间歇性阅读。为什么?所以我重新 Apk 了
main
昨晚的文件和繁荣间歇输入再次读取。
rfsocket
时创建了 java 对象。蓝牙对象未连接到指定端口,
Null
对象在另一个端口上初始化,由于某种原因,
if
没有看到该端口。 block
self.recv_stream is not None
和
self.recv_stream != None
.可能是因为他们不是
Null
对象,但
Null
对于我指定的后续端口 1 套接字连接。
readline()
像我的例子一样工作,
read()
接受三个参数
bytes(), int offset, int len(bytes()
这在
jnius.jnius.exception
中并不清楚象形文字的消息。还在摸索
write
方法。您可以在
BufferedReader
中指定的一件事方法是您要读取的 block 大小的第二个参数,或者在 java 中使用
defaultCharBufferSize
.
最佳答案
所以我发布了我的答案,因为我已经解决了所有问题。
要连接到我在 GitHub example 上构建的蓝牙按照 android developers site 上的建议进行操作.在创建 getOutputStream
之前,我必须明确设置自己的套接字。和 getInputStream
java 对象,否则连接和对象的端口将不一样。您只需调用GetBSerial()
连接
def get_socket_stream(self, name):
defaultCharBufferSize = 8192
try:
blueAdapt = BluetoothAdapter.getDefaultAdapter()
if self.rfsocket is not None:
if self.rfsocket.connected:
reader = InputStreamReader(self.rfsocket.getInputStream(), getEncode)
recv_stream = BufferedReader(reader)
send_stream = self.rfsocket.getOutputStream()
else:
self.rfsocket = self.device.createRfcommSocketToServiceRecord(UUID.fromString(getUuid))
if self.get_port_connect():
reader = InputStreamReader(self.rfsocket.getInputStream(), getEncode)
recv_stream = BufferedReader(reader, defaultCharBufferSize)
send_stream = self.rfsocket.getOutputStream()
else:
if blueAdapt is not None:
if blueAdapt.isEnabled():
paired_devices = blueAdapt.getBondedDevices().toArray()
self.rfsocket = None
for self.device in paired_devices:
if self.device.getName() == name:
if self.device.bluetoothEnabled:
self.rfsocket = self.device.createRfcommSocketToServiceRecord(
UUID.fromString(getUuid))
if self.rfsocket is not None:
if self.get_port_connect(): #connect and set the port before creating java objects
reader = InputStreamReader(self.rfsocket.getInputStream(), getEncode)
recv_stream = BufferedReader(reader, defaultCharBufferSize)
send_stream = self.rfsocket.getOutputStream()
break
else:
self.ids.bluet_info.text = '[b]Bluetooth not enabled[/b]'
if recv_stream is not None and send_stream is not None:
return recv_stream, send_stream
else:
return False, False
except UnboundLocalError as e:
return False, False
except TypeError as e:
return False, False
def get_port_connect(self):
try:
if self.rfsocket.port <= 0:
self.rfsocket = self.device.createRfcommSocket(1) #set the port explicitly
if not self.rfsocket.connected:
self.rfsocket.connect()
else:
if not self.rfsocket.connected:
self.rfsocket.connect()
if self.rfsocket.connected:
self.ids.bluet_info.text = '[b]Connected[/b]'
return True
except jnius.jnius.JavaException as e:
self.ids.bluet_info.text = '[b]Cannot connect to socket[/b]'
def GetBSerial(self):
try:
getDevname = self.the.config.get('bluetoothsettings', 'stringbluetdevname')
self.recv_stream, self.send_stream = self.get_socket_stream(getDevname)
except jnius.jnius.JavaException as e:
self.ids.bluet_info.text = '[b]Not Connected[/b]'
readLine()
方法,但要使用
read()
方法,有两种构建字符串的方法。在外部(我只尝试过这个)或在数组中。
CharBuilder = autoclass('java.lang.Character')
if self.recv_stream.ready() != None:
r = self.recv_stream.read()
theChar = CharBuilder.toChars(r) #gives a tuple of which the first element is a character
self.read += theChar[0]
write()
的第一件事方法是它需要一个字节对象。所以你建立一个
bytearray()
并将其用作论据。使用 ESC/POS 打印机初始化命令和字符串的示例:
i = [27,64] #ASCII escape integer and at sign integer
pre = bytearray(i)
cmd = 'Hello You\n'.encode('UTF-8')
#extend bytearray
pre.extend(cmd)
self.send_stream.write(pre)
self.send_stream.flush()
关于java - 如何使用蓝牙 getInputStream 和 getOutputStream 的 pyjnius 读写参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58477961/
我的 Controller 中有这个方法。 Whick 基本上呈现 pdf 文件。 def getUserInvoiceImage (GetInvoiceDataCommand form) {
我用谷歌搜索错误消息 getOutputStream() has already been called for this response很多人说这是因为 ,但在我的代码中,没有空格或换行符。我在
我用谷歌搜索错误消息 getOutputStream() has already been called for this response很多人说这是因为 ,但在我的代码中,没有空格或换行符。我在
这个问题已经有答案了: java.lang.IllegalStateException: getOutputStream() has already been called for this resp
我正在使用 Spring 开发一个项目,我遇到了这个问题,我用谷歌搜索了错误消息,我确实找到了解决方案,甚至所有关于这个问题的 SO 帖子也是如此 java.lang.IllegalStateExce
你好,当我尝试在程序的连接方法中使用这两行代码时,出现错误“找不到符号方法 getOutputStream()” 我不知道我做错了什么,这是代码 socket = new ServerSocket(6
我用谷歌搜索错误信息 getOutputStream() has already been called for this response很多人说是因为 ,但在我的代码中,没有空格或换行符。我在li
我正在编写一个 java 代码来将 POST 请求发送到 URL,但它卡在粗体指示的行上。我在 Android 模拟器上运行这个 URL url = new URL("htt HttpURLConne
来自此链接“Writing to the OutputStream of Java Process/ProcessBuilder as pipe”并进行研究,我没有找到指定从 getOutputStr
我正在使用 jssc 库通过串行端口与设备进行通信。在标准 java SerialComm 库中有两个方法 getInputStream() 和 getOutputStream()。 为什么我需要这个
我正在尝试构建将数据发布到node.js服务器的java应用程序。 在 Node.js 中处理帖子的代码如下: app.post('/login.html', function (req, res)
我有一个想要测试的servlet。我想测试 Mockito 的 doGet。在来自 srvlet 的主代码信息中,通过 PrintWriter 转到页面/json。在我的测试中,我想要一个包含测试信息
我正在为我们的 Android 设备创建一个应用程序。本节的目的是将用户名和密码(当前仅分配为字符串)发布到 Web 服务并接收登录 token 。当运行代码时,在 getOutputStream()
我正在尝试从 MySQL-DB 下载 pdf(我将其作为 Blob 获取,到目前为止一切正常。但是当我尝试让 ServletOutputstream 将其发送到客户端时,程序崩溃。 AFAIK 当该方
所以我从 GUI 启动 Bukkit (Minecraft) 服务器。 ProcessBuilder builder = new ProcessBuilder(); builder.redirectE
我在 Windows 机器上使用 gzip 实用程序。我压缩了一个文件并作为 blob 存储在数据库中。当我想使用 gzip 实用程序解压缩此文件时,我将此字节流写入 process.getOutpu
我知道还有许多其他帖子处理同样的错误,但所有这些帖子要么是关于 JSP/GSP 页面的,要么是出于任何其他原因,对我的情况不是很有帮助。我将 Spring MVC 与 Thymeleaf 一起使用。以
一个问题 以为例 DataOutputStream output= new DataOutputStream(clientSocket.getOutputStream()) ; 或 DataInput
我正在使用 Spring @RestController 并以 Json 格式发送响应。这工作正常,但我需要向记录器发送响应,所以我已经实现了 Spring 的 HandlerInterceptor
Socket socket = sslSocketFactory.createSocket(); socket.connect(new InetSocketAddress(hostname, port
我是一名优秀的程序员,十分优秀!