Android LicenseChecker因空指针异常而崩溃

Jak*_*sen 10 crash android

似乎如果Android手机未登录Google Play,则checkAccess-call将抛出NullPointerException并最终导致应用程序崩溃:

// user not logged in to Google Play
LicenseChecker licenseChecker = new LicenseChecker(...);
licenseChecker.checkAccess(...) // throws a nullpointer exception and crasches the app
Run Code Online (Sandbox Code Playgroud)

NullPointerException发生在Android框架内部的一个单独的线程中:

FATAL EXCEPTION: background thread
java.lang.NullPointerException
com.google.android.vending.licensing.LicenseValidator.verify()
Run Code Online (Sandbox Code Playgroud)

因此,应用程序似乎无法捕获它并避免崩溃.

任何想法如何避免这种崩溃?(t应该是不能登录Google Play的合法情况)

我能想到的唯一方法是在调用checkAccess之前检查Google Play登录状态.

Ben*_*Lee 9

我修改了LicenseValidator.verify()方法,在开头添加了一个保护检查:

public void verify(PublicKey publicKey, int responseCode, String signedData, String signature) {
    if (signedData==null){
        handleInvalidResponse();
        return;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 当缺少网络连接时(例如飞行模式),上述代码将导致问题.签名数据将在该时间为空,并且当它应该返回RETRY时将返回NOT_LICENSED.上面的代码应该在IF子句中移动,该子句在同一方法中检查响应代码. (3认同)