首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android阻塞evaluateJavascript

Android阻塞evaluateJavascript
EN

Stack Overflow用户
提问于 2018-06-23 07:18:23
回答 1查看 4.5K关注 0票数 1

我试图在我的网页视图中使用阻塞函数进行evaluateJavascript查询。函数线程等待结果。然而,evaluateJavascript和ValueCallback都是在主线程上调用的,主线程被暂停等待结果,这意味着等待不会捕获结果。这是我的例子,

代码语言:javascript
复制
private String getFirstUser(){
    String evS = "document.getElementsByClassName(\"hm-user\")[0].innerHTML";
    final CountDownLatch cdl = new CountDownLatch(1);
    final StringBuilder sb = new StringBuilder();
    try{
        evaluateJavascript(evS, new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                if(value != null && value.length() != 0 && !value.equals("null")){
                    sb.append(value);
                }
                cdl.countDown();
            }
        });
        cdl.await(200, TimeUnit.MILLISECONDS);
    }catch (Exception e){};
    return sb.length() == 0 ? null : sb.toString();
}

什么是,回调直到等待解除阻塞,意味着函数总是返回null?

我做错了什么?我已经将它用于http请求,并且它起了作用。

编辑:我知道类似Android main thread blocking WebView thread这样的线程,但是没有解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-23 07:39:21

由于调用onReceiveValue将不是同步的,并且涉及阻塞主线程,以防您希望使其同步,所以我建议您避免这样做。与其尝试将其实现为同步调用,不如实现回调,并让它继续以异步方式进行。

您可以实现以下目标:

代码语言:javascript
复制
private void getFirstUser(final ValueCallback<String> valueCallback){
    String evS = "document.getElementsByClassName(\"hm-user\")[0].innerHTML";    
    final StringBuilder sb = new StringBuilder();
    try{
        evaluateJavascript(evS, valueCallback);
    }catch (Exception e){ 
        valueCallback.onReceiveValue(null);// You can pass any value instead of null.
    };

}

调用方法时,只需执行:

代码语言:javascript
复制
getFirstUser(new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                if(value != null && value.length() != 0 && !value.equals("null")){
                   //do something with proper value
                }else{
                  // take necessary action if value is null
                }

            }
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50998907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档