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.