Web3j

web3j-android 錯誤:語言級別 1.7 不支持靜態介面方法呼叫

  • June 8, 2019

我收到這個錯誤

語言級別 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")
   }

引用自:https://ethereum.stackexchange.com/questions/49196