之前一直在做钱包、交易方面的开发,最近在搞ETH智能合约,但是最近几天我卡在了一个问题,就是Android调用ETH合约,一直失败,而且好几天了,不过好在今天在qq群一个大佬的指点之下,问题解决了。这个问题不复杂,但是还是想记录一下,方面后人如果遇到类似的情况可以快速解决(我就是百度了半天,没有答案,哭泣)。
问题描述
我是通过web3j命令行工具把sol合约文件转换成java类之后,然后再去调用的。调用合约的方法的时候,就报了这个错误,好像是说没有这个方法,但是我去对比了一下java和sol中的这个方法,方法名是一样的,而且这个类是自动生成的,应该没有问题。
我的解决
说实话,我卡了几天,一直没找到原因。还好最后在一位大佬的指点下,他说看看会不会是jar包冲突导致的,这才点醒了我,我赶紧去看看gradle
这里,我导入了2个jar包,其实我只需要android版本的那个就行
然后,再把web3j创建的方式改一下
//注意:这是java的创建方式
// web3j = Web3jFactory.build(new HttpService(rinkebyUrl));
//android的创建方式
web3j = Web3j.build(new HttpService(rinkebyUrl));
我之前一直用的java那个(哭泣😢),这里大家不要弄错了。
好了,到这里,你就可以正常的完成合约交互了。
推荐大家看看Web3j官方文档(按文档走,确实少踩坑):
https://docs.web3j.io/getting_started.html#gradle
https://github.com/web3j/web3j