Web3j
web3j-android 錯誤:語言級別 1.7 不支持靜態介面方法呼叫
我收到這個錯誤
語言級別 1.7 不支持靜態介面方法呼叫
當有
Web3j web3j = Web3j.build(new HttpService(url));
這裡的文件說,對於 Android,您應該使用它而不是 Web3j.build():
Web3jFactory.build(new HttpService());
但是 Web3jFactory 不存在。我沒有這樣的導入文件(如果正確,我發現了什麼)
import org.web3j.protocol.Web3jFactory;
這裡是我的 build.gradle (簡化為相關資訊)
apply plugin: 'java' repositories { google() jcenter() } dependencies { implementation 'org.web3j:core:3.3.1-android' implementation group: 'org.web3j', name: 'infura', version: '3.3.1' }
在最新版本的 web3j-android 庫**‘org.web3j:core:4.1.0-android’**中,
org.web3j.protocol.Web3jFactory
確實被刪除了。但是,文件仍然說我們應該使用它。我相信他們還沒有更新文件。相反,我們實際上應該使用正常的:
Web3j web3j = Web3j.build(new HttpService(url));
注: 此方法為靜態介面方法*,僅Java 8或1.8版本支持
因此,如果您的 android 項目仍在使用 Java 7,請務必更新您的 android 外掛並啟用 Java 8,如https://developer.android.com/studio/write/java8-support。錯誤將消失,你很高興。
否則,您也可以轉到不支持的錯誤,按alt+enter並選擇“將語言級別設置為 8…”
https://ethereum.stackexchange.com/a/49371/50785不是我認為的永久解決方案……
如果你使用 kotlin 版本,你可以這樣編碼:
private var web3: Web3j? = Web3j.build(HttpService("https://ropsten.infura.io/v3/youtoken")) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val web3ClientVersion = web3!!.web3ClientVersion().sendAsync().get() val clientVersion = web3ClientVersion.getWeb3ClientVersion() print("Connected to Ethereum client version: $clientVersion") }