Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图与web3j(Android)取得平衡,获取空指针异常_Java_Android_Web3 Java - Fatal编程技术网

Java 试图与web3j(Android)取得平衡,获取空指针异常

Java 试图与web3j(Android)取得平衡,获取空指针异常,java,android,web3-java,Java,Android,Web3 Java,在android上的web3j中,我很难让任何东西正常工作,尝试这个例子(我已经替换了token和addr),我使用的地址中确实有一些Rinkeeth。在手机上测试,当我加载这个类/活动时,应用程序崩溃,代码在oncreate方法中。在清单中打开internet权限,并在构建梯度中编译android web3j Web3j web3 = Web3jFactory.build(new HttpService("https://rinkeby.infura.io/token"));

在android上的web3j中,我很难让任何东西正常工作,尝试这个例子(我已经替换了token和addr),我使用的地址中确实有一些Rinkeeth。在手机上测试,当我加载这个类/活动时,应用程序崩溃,代码在oncreate方法中。在清单中打开internet权限,并在构建梯度中编译android web3j

 Web3j web3 = Web3jFactory.build(new 
 HttpService("https://rinkeby.infura.io/token"));

    EthGetBalance ethGetBalance = null;
    try {
        ethGetBalance = web3
                .ethGetBalance("addr",DefaultBlockParameterName.LATEST)
                .sendAsync()
                .get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    BigInteger wei = ethGetBalance.getBalance();
错误

06-30 02:15:47.115 18904-18904/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.user.test, PID: 18904
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.user.test/com.test.user.test.balance}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2607)
    at android.app.ActivityThread.access$900(ActivityThread.java:174)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1325)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5756)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
    at com.test.user.test.balance.onCreate(balance.java:43)
    at android.app.Activity.performCreate(Activity.java:5619)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2512)

错误中引用的第43行是我提交的代码中的最后一行代码。当我注释掉该行应用程序时,它不会崩溃,只会收到一些(我假设是全部)警告。

ethGetBalance=web3.ethGetBalance(public_address,DefaultBlockParameterName.LATEST)。sendAsync().get(); BigInteger=ethGetBalance.getBalance(); Log.e(“乙醚平衡”,“微”+微); 这在playstore上提供的我的应用程序中运行良好


ethGetBalance=web3.ethGetBalance(公共地址,DefaultBlockParameterName.LATEST).sendAsync().get(); BigInteger=ethGetBalance.getBalance(); Log.e(“乙醚平衡”,“微”+微); 这在playstore上提供的我的应用程序中运行良好


问题在于,当您想要访问ethGetBalance时,它是空的,因为方法web3j.ethGetBalance失败

您将“addr”作为地址发送,这不是有效的以太坊地址

有效以太坊地址的格式类似于:0x开头,然后有40个元素(数字0-9或字母A到F)。 要查看您的地址是否存在,请尝试在网站中查找

尝试使用正确的以太坊地址,它应该可以工作

EthGetBalance ethGetBalance = web3j
                    .ethGetBalance(userAddress, DefaultBlockParameterName.LATEST)
                    .sendAsync()
                    .get();


BigInteger wei = ethGetBalance.getBalance();

问题是,当您想要访问ethGetBalance时,它是空的,因为方法web3j.ethGetBalance失败

您将“addr”作为地址发送,这不是有效的以太坊地址

有效以太坊地址的格式类似于:0x开头,然后有40个元素(数字0-9或字母A到F)。 要查看您的地址是否存在,请尝试在网站中查找

尝试使用正确的以太坊地址,它应该可以工作

EthGetBalance ethGetBalance = web3j
                    .ethGetBalance(userAddress, DefaultBlockParameterName.LATEST)
                    .sendAsync()
                    .get();


BigInteger wei = ethGetBalance.getBalance();

您的ethGetBalance返回空值。我认为您输入了无效地址。这就是为什么要用这种方法 web3j.ethGetBalance失败。请使用有效地址尝试此操作

    Web3j web3 = Web3jFactory.build(new HttpService("https://ropsten.infura.io/your-token"));

    String strAddress="0x24b********************"; //strAddress is your wallet address
    EthGetBalance ethGetBalance=
    web3.ethGetBalance(strAddress,DefaultBlockParameterName.LATEST).sendAsync().get();

    BigInteger wei = ethGetBalance.getBalance();
getBalance.getBalance()用于获取以太平衡。 要在钱包中获取实际代币,请使用此转换方法

  java.math.BigDecimal tokenValue = Convert.fromWei(String.valueOf(wei), Convert.Unit.ETHER);
  String strTokenAmount = String.valueOf(tokenValue);

您的ethGetBalance返回空值。我认为您输入了无效地址。这就是为什么要用这种方法 web3j.ethGetBalance失败。请使用有效地址尝试此操作

    Web3j web3 = Web3jFactory.build(new HttpService("https://ropsten.infura.io/your-token"));

    String strAddress="0x24b********************"; //strAddress is your wallet address
    EthGetBalance ethGetBalance=
    web3.ethGetBalance(strAddress,DefaultBlockParameterName.LATEST).sendAsync().get();

    BigInteger wei = ethGetBalance.getBalance();
getBalance.getBalance()用于获取以太平衡。 要在钱包中获取实际代币,请使用此转换方法

  java.math.BigDecimal tokenValue = Convert.fromWei(String.valueOf(wei), Convert.Unit.ETHER);
  String strTokenAmount = String.valueOf(tokenValue);

我在IDE中运行了你的代码片段,效果很好。您是否尝试过使用同步版本?尝试用
.send()
替换
.sendAsync().get()
。由于您正在调用视图函数,因此不需要使用异步调用;使用catch(IOException ex){ex.printStackTrace();}但仍然存在相同的错误。我相信您在发布内容的范围之外发生了其他事情。即使您有无效的令牌或错误的以太坊地址,代码也可以工作。它也适用于我使用同步和异步方法。您必须从两条catch语句中的一条获取另一个stacktrace,该语句随后会因NPE而失败(因为您所做的只是打印stacktrace,而不是处理错误)。分解代码并通过调试器运行它。这是我能给出的最好的建议。上面说在android studio中从未使用变量wei。。我不知道我是否遗漏了什么,因为我不擅长java,所以不确定采取哪些步骤让web3j正常工作。我想我的问题是低版本android(4.4.4)中的ssl握手失败,因此没有返回任何东西,我将尝试解决该问题。但它在使用api25的emulator中工作。我在IDE中运行了您的代码片段,它工作得很好。您是否尝试过使用同步版本?尝试用
.send()
替换
.sendAsync().get()
。由于您正在调用视图函数,因此不需要使用异步调用;使用catch(IOException ex){ex.printStackTrace();}但仍然存在相同的错误。我相信您在发布内容的范围之外发生了其他事情。即使您有无效的令牌或错误的以太坊地址,代码也可以工作。它也适用于我使用同步和异步方法。您必须从两条catch语句中的一条获取另一个stacktrace,该语句随后会因NPE而失败(因为您所做的只是打印stacktrace,而不是处理错误)。分解代码并通过调试器运行它。这是我能给出的最好的建议。上面说在android studio中从未使用变量wei。。我不知道我是否遗漏了什么,因为我不擅长java,所以不确定采取哪些步骤让web3j正常工作。我想我的问题是低版本android(4.4.4)中的ssl握手失败,因此没有返回任何东西,我将尝试解决该问题。但它使用api25在emulator中工作。在我的第一句话中,我提到我替换了地址和令牌。问题是web3j中使用的okhttp连接在5.0之前的android设备上无法工作,因为默认情况下TLS1.2关闭会导致SSL握手错误。在我的第一句话中,我提到我替换了地址和令牌。问题是web3j中使用的okhttp连接在5.0之前的android设备上无法工作,因为SSL握手错误,默认情况下是由TLS1.2关闭引起的。nice one,gauravnice one,gaurav