Как вернуть значение из наблюдаемого в метод JavascriptInterface? - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно вернуть значения из контактов, которые извлекаются из телефона с наблюдаемой. Проблема заключается в возвращаемом значении.

У меня есть следующий метод в мосте:

@JavascriptInterface
    public String getFavoriteUsers() {
        return getBridgeHelper().getFavoriteUsers();
    }

Он вызывает метод в помощнике (который является классом, как выполнять задачи) и внутри этого помощника:

@SuppressLint("CheckResult")
    public String getFavoriteUsers() {

        Observable.fromCallable(() -> {
            SharedPreferences sp = getContext().getSharedPreferences(Constants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
            String userIdStores = sp.getString(Constants.SP_FAVOURITES, "[]");
            return new Gson().toJson(ContactsManager.findContactsById(ContactsData.getInstance().contactsStored, userIdStores));
        })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        result -> returnObservedContacts(result),
                        throwable -> LoggerManager.handlesError(TAG, throwable, throwable.getMessage())
                );
    }

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

Спасибо

РЕШЕНИЕ:

Решение состоит в том, чтобы удалить подписку из Observable и добавить blockingFirst в конце. Затем мы можем сделать наблюдаемое возвращаемым значением.

1 Ответ

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

Вместо того, чтобы возвращать результат из getFavoriteUsers, создайте метод внутри тега <script> на вашем веб-сайте, который принимает список contacts в качестве параметра, затем вызовите этот метод.

Этот ответ StackOverflow объясняет, как вызвать функцию javascript

Редактировать: поскольку загрузка с SharedPreference не занимает много времени и у вас нет доступа к веб-сайту, вы можете загрузите контакты на OnCreate страницы веб-просмотра и сохраните результаты в глобальной переменной, затем вызовите loadUrl веб-просмотра. После этого верните глобально сохраненный результат на getFavoriteUsers

...