pyjnius java抽象类实现
Posted
技术标签:
【中文标题】pyjnius java抽象类实现【英文标题】:pyjnius java abstract class implementation 【发布时间】:2017-02-27 23:20:53 【问题描述】:我正在尝试实现 android.bluetooth.le.ScanCallback,这是一个使用 pyjnius 的抽象类。在我实例化下面给出的 python 类的那一刻,有一个 JVM 错误。该错误表明 android.bluetooth.le.ScanCallback 不是接口类。我相信接口是一个抽象类。我错过了什么?
class ScanCallback(PythonJavaClass):
__javainterfaces__ = ['android/bluetooth/le/ScanCallback']
def __init__(self, scanCallback, batchCallback=None, errorCallback=None):
super(ScanCallback, self).__init__()
self.batchCallbk = batchCallback
self.scanCallbk = scanCallback
self.errorCallbk = errorCallback
pass
@java_method ('(L/java/utils/List<ScanResult>/)V')
def onBatchScanResults(self,results):
print dir(results)
@java_method ('(I)V')
def onScanFailed(self, errorCode):
print "failed to scan" + str(errorCode)
raise ValueError(str(errorCode))
@java_method ('(IL/android/bluetooth/le/ScanResult)V')
def onScanResult(self, callbackType, result):
print dir(result)
【问题讨论】:
【参考方案1】:我发现使用 PyJNius 只能实现接口类(纯抽象类)而不是抽象类。 “android/bluetooth/le/ScanCallback”是一个抽象类,而不是早期蓝牙 API (
【讨论】:
这是android上java接口共有的问题。如果 Google 将用户类作为接口提供,这样第三方 api 可以提供它们,那就太好了。 Android 使用不同的字节码系统阻止了正常的方法。以上是关于pyjnius java抽象类实现的主要内容,如果未能解决你的问题,请参考以下文章