android webview gettitle,android – 如何从UI线程WebView.getTitle()?

Morgan’s answer,虽然可能会修复编译错误,但并不是真的解决这个问题的办法.

首先,它不会将对getTitle()的调用更改为不同的线程.这个根本的问题是为什么Android在运行时给你错误.

你在评论中说

The circumstances are that I am calling it in WebViewClient.onPageFinished(), which happens not to be on the UI thread.

这可能是一个问题.如果您从UI线程启动Web请求,那么onPageFinished()当然应该在UI线程上被调用.你可以解释你如何开始Web请求,为什么你这样做?绝大多数时候,你不应该看到onPageFinished()在后台调用,所以你可能在其他地方有问题.

(注意:如果您认为您需要在后台调用WebView.loadUrl()以避免阻止UI,请see this other answer on that issue)

如果您真的认为您需要在后台启动Web请求,并且在后台看到onPageFinished(),则需要注意在UI线程上调用getTitle().

另外,如果你从onPageFinished()方法调用它,那么就不需要使用这样的语法:

String title = MyWebView.this.getTitle();

在该方法中,您将传递您的Web视图的实例,因此直接使用它:

public void onPageFinished (WebView view, String url) {

String title = view.getTitle();

}

但是,正如我所说,这并不解决线程问题.您需要向我们展示为什么要尝试使用该方法中的页面标题,但是一种安全使用它的方法就是这样:

public void onPageFinished (final WebView view, String url) {

view.post(new Runnable() {

public void run() {

String title = view.getTitle();

// do something with title that affects the UI here

}

});

}

请注意,我需要在上述代码中使view参数为final.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值