我正在从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);
});
}
您可以在完成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