小编Tor*_*ist的帖子

为什么在nullcheck之后Smartcast无法工作

我正在尝试代码的出现,并希望在第10天创建一个类.我知道值可以为null,因此我将它们声明为可空.在某些时候,我需要检查值是否已分配并对其执行某些操作.问题来了.我事先检查过high != null,但在接下来的行中,我必须!!用来说服编译器它实际上是null.

它似乎找不到合适的compareTo方法,尽管首先进行了无效检查.我猜,它没有智能播放我的变量

private class Bot(val number: Int, var low: Int?, var high: Int?) {

  fun acceptValue(value: Int) {
    if (low == null && high == null) {
      high = value
    } else {
      if (high != null) {
        if (high!! > value) { //it doesn't compile, because appareantly, high is still not considered nonnull at this point
          low = value
        } else {
          low = high
          high = value
        }
      }
    } …
Run Code Online (Sandbox Code Playgroud)

kotlin

7
推荐指数
2
解决办法
414
查看次数

如何同步检索当前地理位置?

由于我们的应用程序的工作方式,我需要同步获取用户的当前位置。我们当前的实现使用com.google.android.gms.location.LocationListener来接收位置更新。问题是,我需要在尝试第一次调用之前更新位置服务器端,否则用户会得到错误的数据。

LocationServices.FusedLocationApi.getLastLocation() 不适合这个,因为a)它似乎总是返回null(无论出于何种原因)和b)我们已经保存了用户最后一个已知位置服务器端,因此检索最后一个已知位置并将其发送到服务器是多余的.

伪代码

//this is the first call I need to make
webservice.appStart(AppStartBody body);
//then I want to retrieve the current location and send it to the server
webservice.setGeoLocation(getCurrentLocation());
//finally, I retrieve the items on the server based on the location
webservice.getListItems();
Run Code Online (Sandbox Code Playgroud)

等待第一个位置更新事件是我想避免的一种可能性,因为我不知道它会在多长时间内触发,我可能不得不让我的用户在加载屏幕上停留很长时间,然后失去他们,因为没有人喜欢等待。

gps android android-fusedlocation android-gps

6
推荐指数
1
解决办法
1300
查看次数

FusedLocation API-不调用onLocationChanged

我们的应用程序中的流程如下:

  1. 显示全屏活动,向用户解释为什么我们需要GPS定位
  2. 获得GPS许可
  3. 显示加载微调器
  4. 获得第一个地理位置
  5. 发送第一个位置到服务器
  6. 从服务器加载相关数据
  7. 隐藏加载微调器

我们收到了来自用户的多个支持请求,他们说什么也没有发生,他们只看到加载微调器。

目前,我们正在执行已激活的GPS提供程序,因此这不是无效定位服务的问题。

我设法通过在其中一部手机上创建用户帐户并启动该应用程序来重现该错误,并且我注意到未调用onLocationChanged

代码已经过去了LocationServices.FusedLocationApi.requestLocationUpdates,因此它应该提供位置,但是不提供

我知道我过去通过打开Goog​​le地图解决了这个问题,但是

a)我几乎无法想象用户到目前为止没有使用过Google地图b)告诉他们打开Goog​​le地图来解决我们应用中的问题听起来很奇怪

是使用的确切代码的要点(我在131行上设置了一个断点,开始进行调试并到达那里,因此我应该获取位置,但是从未调用过onLocationChanged方法

android fusedlocationproviderapi android-fusedlocation

6
推荐指数
1
解决办法
614
查看次数

AppLicensing失败 - 签名为空字符串

我已经为InApp-Billing实现了App-Licensing,现在我已经开始了Error.NOT_LICENSED,我不知道出了什么问题.我正在处理的版本尚未发布到游戏商店.

这是我用来启动许可过程的代码:

private void checkLicense(int retries) {
  if (retries != 5) {
    String publicKey = "YOUR KEY";
    final CdcLicenseCheckerCallback callback = new CdcLicenseCheckerCallback();
    String deviceId = mPrefsHandler.getDeviceId();
    deviceId = deviceId != null ? deviceId : UUID.randomUUID().toString();
    mPrefsHandler.setDeviceId(deviceId);
    Crashlytics.setBool("has Device-Id", deviceId != null);
    final LicenseChecker checker = new LicenseChecker(this, new ServerManagedPolicy(this,
        new AESObfuscator(new byte[] { 1, 1, ... , 1 }, getPackageName(),
            deviceId)), publicKey);
    checker.checkAccess(callback);
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个生产变体来弄清楚发生了什么,并发现,在该方法LicenseValidator.java的参数是一个空字符串,导致返回.signatureverifysig.verify(Base64.decode(signature))ERROR.NOT_LICENSED

if (!sig.verify(Base64.decode(signature))) {
  Log.e(TAG, "Signature …
Run Code Online (Sandbox Code Playgroud)

android licensing in-app-purchase in-app-billing google-play

5
推荐指数
1
解决办法
300
查看次数