我正在尝试开发一个分散的android应用程序。这是一个在线两人的Tic脚趾游戏。我已经在android演播室中实现了后端和前端的一部分。更具体地说,我使用solc和web3j为我的合同获得了一个包装类,然后将其包含在android项目中。所以我可以调用这个包装类的不同函数。现在,用户可以创建一个帐户和登录,并创建一个游戏与这个前端。当第二个玩家加入一个创建的游戏时,我的合同会发出一个事件通知创建者某个玩家已经加入了这个游戏。此外,在游戏中,每当玩家移动时,就会发出一个事件来让另一个玩家知道。
现在,困难在于我不知道如何使用Java捕捉这个事件。我对此进行了大量的搜索,但没有发现任何有用的东西。请任何人解释一下如何做到这一点,或者提供一个包含一些例子的链接?
发布于 2021-04-02 19:39:16
您可以使用生成的java包装器中公开的events方法。
有多种方法来生成包装器,比如使用Web3j-gradle-插件、web3j-maven-plugin、web3j-cli.
对于web3j-gradle-plugin,应该将以下行添加到build.gradle文件中:
plugins {
id "org.web3j" version "4.8.4"
}然后,将包含一些事件的some文件放在src/main/solidity目录下,并运行generateContractWrappers Gradle任务。
既然您有了包装器,您可以deploy智能契约,也可以load它。
让我们继续讨论如何使用它们来获取事件。
如果您检查生成的包装器,您将为每个事件找到两种方法:
get<event_name>Events(TransactionReceipt transactionReceipt):这个可以通过提供它的TransactionReceipt来获取在特定事务中发出的事件。<event_name>EventFlowable(...):这里有两个过载,一个需要一个org.web3j.protocol.core.methods.request.EthFilter,另一个需要两个org.web3j.protocol.core.DefaultBlockParameter。如果选择第一个事件,则只能获取在该特定事务中发生的事件,并将它们作为包含事件的List< <event_name>EventResponse >直接获取。
对于后者,它将返回一个Flowable< <event_name>EventResponse >。您可以使用它来实际订阅事件,继续侦听事件,还可以像使用io.reactivex.Flowable一样设置回调。
https://ethereum.stackexchange.com/questions/91561
复制相似问题