Я создал функцию для проверки состояния забора в Awareness API. Но мне нужно вернуть результат. Итак, я объявил логическое значение, но оно требует, чтобы я объявил его окончательным. Можете ли вы помочь мне с решением, как вернуть это значение?
public static boolean isFencesActive(final Context context) {
boolean isActive;
Awareness.getFenceClient(context).queryFences(FenceQueryRequest.forFences(Arrays.asList(Constans.DETECTION_FENCE_DRIVING, Constans.DETECTION_FENCE_WALKING)))
.addOnSuccessListener(new OnSuccessListener<FenceQueryResponse>() {
@Override
public void onSuccess(FenceQueryResponse fenceQueryResponse) {
FenceStateMap map = fenceQueryResponse.getFenceStateMap();
isActive = !map.getFenceKeys().isEmpty(); //Needs to be final
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Failed: " + e);
isActive = false;
}
});
return isActive;
}




@Dim, вы должны использовать, как показано ниже (используя это, чтобы достичь того, чего хотите):
public static void isFencesActive(final Context context) {
Awareness.getFenceClient(context).queryFences(FenceQueryRequest.forFences(Arrays.asList(Constans.DETECTION_FENCE_DRIVING, Constans.DETECTION_FENCE_WALKING)))
.addOnSuccessListener(new OnSuccessListener<FenceQueryResponse>() {
@Override
public void onSuccess(FenceQueryResponse fenceQueryResponse) {
FenceStateMap map = fenceQueryResponse.getFenceStateMap();
if (!map.getFenceKeys().isEmpty()){
//Perform your operation here is the better way
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Failed: " + e);
}
});
}
Это обходной путь, а не реальное решение. А также я считаю, что OnSuccessListener выполняется асинхронно, и существует большая вероятность того, что isActive [0] вернется до того, как он будет установлен, и вы получите неожиданный результат
Это может вам помочь. Объявите переменную boolean isActive; глобально.
После некоторого размышления я понял, что это асинхронная задача, и поэтому я получаю false. Я создал обратные вызовы, которые отправляют эту информацию в мою деятельность.
Пожалуйста, не просто вставляйте блок кода, а объясните, что вы сделали для решения проблем, с которыми столкнулся исходный плакат.