等待函数完成并确保我没有返回错误的值

问题描述 投票:0回答:1

我正在从Firebase远程配置中获取信息,并且我有一个函数可以在执行此检查后返回布尔值。我想要的是能够在代码恢复并返回一个值(该值可能不代表实际的真实值)之前等待函数完成的能力,因为请求返回可能比在设备上运行的代码花费更多的时间。因此,我处于回调的恶性循环中,无法帮助我获得想要的东西。这是我的代码段-


private boolean appIsBelowMinimumAppVersion() {
    int currentVersionCode = BuildConfig.VERSION_CODE;
    getMinAppVersion(); // <- at this place the code might take more time to execute than the code after that running 
    return  min_version < currentVersionCode;
  }

  private void getMinAppVersion(){
    FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
    firebaseRemoteConfig.setConfigSettingsAsync(settings);
    firebaseRemoteConfig.fetchAndActivate().addOnCompleteListener(task -> {
      if (!task.isSuccessful() || !task.isComplete()) {
        //our task is not successful
        return;
      }
      min_version = firebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
    });
  }


android asynchronous callback
1个回答
0
投票

您可以在完成Firebase代码后使用[Handler.Callback][1][Message][1]给出结果。

private boolean appIsBelowMinimumAppVersion() {
    int currentVersionCode = BuildConfig.VERSION_CODE;
    getMinAppVersion(new Handler.Callback() {
        @Override
        public boolean handleMessage(@NonNull Message message) {
            // get your min_version value here
            int min_version = message.getData().getInt('min_version');
        }
    });
}

private void getMinAppVersion() {
    FirebaseRemoteConfig firebaseRemoteConfig = 
    FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
    firebaseRemoteConfig.setConfigSettingsAsync(settings);
    firebaseRemoteConfig.fetchAndActivate().addOnCompleteListener(task 
    -> {
      if (!task.isSuccessful() || !task.isComplete()) {
        //our task is not successful
        min_version = -1;
      }
      min_version = firebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
      Message message = new Message();
      Bundle b = new Bundle();
      b.putInt("min_version", min_version);
      message.setData(b);
      callback.handleMessage(message);
    });
}

注意:此代码适用于Android API 29

© www.soinside.com 2019 - 2024. All rights reserved.