Java Android智能合约SendAsync问题 问题

Java Android智能合约SendAsync问题 问题,java,android,ethereum,Java,Android,Ethereum,当将智能合约部署到私有区块链并尝试通过Android Studio应用程序对智能合约中的方法调用执行SendAsync时,我们在控制台中收到一条消息,其中说明以下消息:I/System.out:java.util.concurrent。CompletableFuture@427c299[未完成]。 问题在于我的MainActivity.java文件中名为VarName的变量,如下所示 我试图通过使用传统的java方法创建交易凭证来解决这个问题,但Android似乎不支持这一点。 我知道这是一个问

当将智能合约部署到私有区块链并尝试通过Android Studio应用程序对智能合约中的方法调用执行SendAsync时,我们在控制台中收到一条消息,其中说明以下消息:I/System.out:java.util.concurrent。CompletableFuture@427c299[未完成]。 问题在于我的MainActivity.java文件中名为VarName的变量,如下所示

我试图通过使用传统的java方法创建交易凭证来解决这个问题,但Android似乎不支持这一点。 我知道这是一个问题的原因是,如果我转到remix并尝试调用getState方法,我会收到默认值,从而指示数据未发送

注意)我已经能够通过getState方法从智能合约接收数据

复制步骤 您需要创建一个空白活动项目,并确保为android应用程序启用internet活动。 接下来,将以下代码复制并粘贴到MainActivity.java文件中

package com.example.testingsmartcontractcode;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.util.Log;
导入org.web3j.crypto.Credentials;
导入org.web3j.protocol.web3j;
导入org.web3j.protocol.http.HttpService;
导入org.web3j.tx.gas.ContractGasProvider;
导入java.math.biginger;
导入java.util.concurrent.ExecutionException;
公共类MainActivity扩展了AppCompatActivity{
私有Web3j-Web3j;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
web3j=web3j.build(新的HttpService(“ws://10.0.2.2:8545”);
字符串Account=null;
试一试{
Account=web3j.ethAccounts().sendsync().get().getAccounts().get(0);
}捕获(执行例外){
e、 printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
Log.d(“以太坊账户”,账户);
ContractGasProvider ContractGasProvider=新的ContractGasProvider(){
@凌驾
公共BigInteger getGasPrice(字符串contractFunc){
返回null;
}
@凌驾
公共BigInteger getGasPrice(){
返回null;
}
@凌驾
public BigInteger getGasLimit(字符串contractFunc){
返回null;
}
@凌驾
public BigInteger getGasLimit(){
返回null;
}
};
凭据=凭据。创建(帐户);
字符串contractAddress=“0xf51c2b55B7AF741C9dB105adFC2FB7290f442CA8”;
Hello contract=Hello.load(contractAddress,web3j,credentials,contractGasProvider);
字符串VarName=null;
试一试{
VarName=contract.name().sendAsync().get();
}捕获(例外e){
e、 printStackTrace();
}
Log.d(“以太坊”,VarName);
试一试{
System.out.println(contract.sendData(“Hello”).sendsync());
//TransactionReceipt TransactionReceipt=contract.sendData(“Hello”).send();
//System.out.println(transactionReceipt.getBlockNumber());
}捕获(例外e){
e、 printStackTrace();
}
}
}
要复制的以下Hello.java文件是:

package com.example.testingsmartcontractcode;
导入java.math.biginger;
导入java.util.array;
导入java.util.Collections;
导入org.web3j.abi.TypeReference;
导入org.web3j.abi.datatypes.Function;
导入org.web3j.abi.datatypes.Type;
导入org.web3j.abi.datatypes.Utf8String;
导入org.web3j.crypto.Credentials;
导入org.web3j.protocol.web3j;
导入org.web3j.protocol.core.RemoteCall;
导入org.web3j.protocol.core.RemoteFunctionCall;
导入org.web3j.protocol.core.methods.response.TransactionReceipt;
导入org.web3j.tx.Contract;
导入org.web3j.tx.TransactionManager;
导入org.web3j.tx.gas.ContractGasProvider;
/**
*自动生成的代码。
*请勿修改
*请使用,
*或中的org.web3j.codegen.SolidityFunctionWrapperGenerator
*更新。
*
*使用web3j版本4.5.6生成。
*/
@抑制警告(“原始类型”)
公共类Hello扩展了契约{
私有静态最终字符串BINARY=“{\n”
+\t\“linkReferences\:{}\n
+“\t\”对象\“:\”60806405260408051906020019061004F920805190810160405280600B81526020017F4865C6C6F20576F726C640000000000000000000000000000000000000000008152506000908051906020019061004F929190610062565B50348015661005C57600080FD5B506010107565B8280546001816001161501000203166002900490600052602000020901F016020900481019260106100A357805160FF19168380011785556D1565B821601018582156100D1579182015B828111156100D05782518255916020019190600101906100B5565B5090506100DE91906100E2565B5090565B61010491905B80821115610100576000816009055506001016100E8565B509565B90565B610044F8061011600396000F3FE60606060452023480158010576005B50605B506050043610005E576003003005000000000000000000000000000000000000000000000009004800306FDDE14600635780631865C57D146100E65780639231A5451460169575B600008FD5B61006B61022465B6040518060200182810382528381518181518181818152602001915080519060200190808360005B838110156AB5780820151840152602081019050510565B5050909090810190601F168056100D857808080808080510016016060200361000A0319115260200191505090902502502502502500580910F361050505050808080801900EE6105056060200182810382528381518152602001915080519060200190808360005B8381101561012E5780820151818401520810190506113565B50505090810190601F16801561015B570805015B780808080808019019060116018360200361001000A03191152602001915050505095250505050510390F35B61022600360360208101561017F57601008000FD5B81019080806020019064010000008111156101610119C57600FD5B
pragma solidity ^0.5.4;
contract Hello {
string public name = "Hello World";
 function sendData(string memory d) public {
     name = d;
 }
 function getState() public view returns(string memory){
     return name;
 }
}