Как правильно использовать stati c boolean внутри методов stati c - PullRequest
0 голосов
/ 30 марта 2020

Итак, мне нужно использовать этот метод, чтобы вернуть либо true, либо false, но я столкнулся с проблемой с моим глобальным логическим значением c, так как его значение установлено неправильно.

private static boolean mIsAvailable = false;

    public static boolean isAvailable(final int language){

        //create model for the language
        final FirebaseTranslateRemoteModel lnModel =
                new FirebaseTranslateRemoteModel.Builder(LanguageSetterUtil.setTranslationLanguage(language))
                        .build();

        modelManager.isModelDownloaded(lnModel)
                .addOnSuccessListener(new OnSuccessListener<Boolean>() {
                    @Override
                    public void onSuccess(Boolean aBoolean) {

                        mIsAvailable = aBoolean;
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Error.

                        mIsAvailable = false;

                    }
                })
                .addOnCanceledListener(new OnCanceledListener() {
                    @Override
                    public void onCanceled() {

                        mIsAvailable = false;

                    }
                });

        return mIsAvailable;
    }

Я пытался сделать методы не stati c, но, конечно, это влияет на другие методы, которые я не хочу менять. И я не могу использовать слушателя внутри метода stati c.

1 Ответ

0 голосов
/ 30 марта 2020

Проблема здесь полностью логична. В вашем методе вы не фактически меняете значение переменной вообще - вы просто устанавливаете там слушателей. И только после возврата предыдущего значения вашего логического var. Вы можете создать интерфейс, например,

interface Callback {
    void onResult(boolean result)
}

, а затем изменить свой метод isAvailable на

public static void isAvailable(int language, Callback callback)

, и вместо mIsAvailable = aBoolean; вы вызываете callback.onResult(aBoolean); Так что вам не нужен логический параметр Вар больше, и вы можете удалить его. Теперь, чтобы получить логическое значение, вы должны передать обратный вызов вашей функции:

isAvailable(1, available -> {
    // Use your boolean available as you need here
})
...