天天看點

怎樣在android中用web3j查詢賬戶狀态?

我按照官網的檔案說明查詢一個智能合約的情況。但我得不到想要的結果,這是我的代碼:

Web3j web3j = Web3jFactory.build(new HttpService(url));
                List<Type> inputParameters = new ArrayList<>();
                List<TypeReference<?>> outputParameters = new ArrayList<>();
                Function function = new Function("getManufacturer",
                        inputParameters,
                        outputParameters);
                String functionEncoder = FunctionEncoder.encode(function);
                EthCall response = web3j.ethCall(
                        Transaction.createEthCallTransaction(contractAddress,
                        DefaultBlockParameterName.LATEST
                ).sendAsync().get();
                List<Type> someType = FunctionReturnDecoder.decode(response.getValue(),function.getOutputParameters());
                Iterator<Type> it = someType.iterator();
                Type resault = someType.get(0);
                String a = resault.toString();
                Log.d("MainActitity", a + "111");           

問題解答

web3j是很不錯的,不過需要多一點練習,你會發現它是一個很棒的通過java開發以太坊的API:

代碼有2個問題:

1.問題在代碼中的第三行。清單

outputParameters

應該包含方法的所有傳回變量。是以,如果你希望得到一個字元串,你應該這麼寫:

Arrays.asList(new TypeReference< Utf8String>() {})           

2.但是,可能會有更有趣的發現,你甚至不必擔心編寫Java代碼來實作你的solidity功能,因為web3j可以做到這一點。

SolidityFunctionWrapperGenerator

為你生成這些檔案。你所需要的智能合約的.bin和.abi,它們生成一個Java類。你可以用位址、web3j執行個體和

Credentials.java

來執行個體化該類。這樣,你就可以調用區塊鍊中的智能合約的方法,就像使用其他Java類一樣。。

原文《以太坊常見問題和錯誤》中的:

http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/15/

另外推薦幾個很受歡迎全網稀缺的互動教程:

  • web3j ,主要是針對java和android程式員圍繞web3j庫進行區塊鍊以太坊開發的講解。
  • python以太坊 ,主要是針對python圍繞web3.py進行區塊鍊以太坊應用開發的講解。
  • php以太坊 ,主要是介紹使用php進行智能合約開發互動,進行賬号建立、交易、轉賬、代币開發以及過濾器和事件等内容。
  • 以太坊開發 ,主要是介紹使用node.js、mongodb、區塊鍊、ipfs實作去中心化電商DApp實戰,适合進階。
  • 以太坊教程 ,主要介紹智能合約與dapp應用開發,适合入門。