首页 > 解决方案 > 如何将值从 observable 返回到 JavascriptInterface 方法?

问题描述

我需要从带有可观察的电话检索的联系人返回值。问题是返回值。

我在桥中有下一个方法:

@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 中删除 subscribe 并在末尾添加 blockingFirst。然后,我们可以让 observable 返回一个值。

标签: androidreturnobservablerx-java

解决方案


不是从 中返回结果getFavoriteUsers,而是在您网站的标签内创建一个方法,该方法<script>接受列表contacts作为参数,然后调用此方法。

这个StackOverflow 答案解释了如何调用 javascript 函数

编辑:由于从加载SharedPreference不需要太多时间并且您无权访问该网站,因此您可以OnCreate在 webview 页面上加载联系人并将结果保存到全局变量,然后调用loadUrlwebview。之后返回全局保存的结果getFavoriteUsers


推荐阅读