为什么可以';我不能在onPageStarted、onReceivedError或onPageFinished上使用Android WebView进行调用吗?
我希望能够识别错误发生的时间,并告诉他们显示带有错误的toast消息,但我永远无法让他们打电话。 我还希望能够告诉webview何时开始导航到url,并检测它将要导航到哪个url 不幸的是,它似乎忽略了一切,我不知道一旦发生这种情况,如何启动函数或方法或任何事情。我并不真正关心如何确定何时开始加载页面或发生错误,我只需要一种有效的方法为什么可以';我不能在onPageStarted、onReceivedError或onPageFinished上使用Android WebView进行调用吗?,android,webview,Android,Webview,我希望能够识别错误发生的时间,并告诉他们显示带有错误的toast消息,但我永远无法让他们打电话。 我还希望能够告诉webview何时开始导航到url,并检测它将要导航到哪个url 不幸的是,它似乎忽略了一切,我不知道一旦发生这种情况,如何启动函数或方法或任何事情。我并不真正关心如何确定何时开始加载页面或发生错误,我只需要一种有效的方法 public class MainActivity extends AppCompatActivity { private WebView myWebView;
public class MainActivity extends AppCompatActivity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
myWebView.setWebChromeClient(new WebChromeClient()
{
private boolean error;
public void onPageStarted(WebView view, String url, Bitmap favicon) {
onPageStarted(view, url, favicon);
Toast.makeText(getApplicationContext(), "page started:" + url, Toast.LENGTH_SHORT).show();
error = false;
}
public void onReceivedError( WebView view, int errorCode, String description, String failingUrl) {
error = true;
System.out.println("description error" + description);
view.setVisibility( View.GONE );
Toast.makeText(getApplicationContext(), "error:" + description, Toast.LENGTH_SHORT).show();
}
public void onPageFinished(WebView view, String url) {
if (!error) {
view.setVisibility( View.VISIBLE );
}
error = false;
Toast.makeText(getApplicationContext(), "page finished" + url, Toast.LENGTH_SHORT).show();
}
}
);
myWebView.setBackgroundColor(0);
WebSettings webSettings = myWebView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setAllowFileAccess(true);
// Other webview settings
myWebView.addJavascriptInterface(new MyJavascriptInterface(this), "Android");
myWebView.loadUrl("https://example.com/");
}
}
中未定义onPageStarted()
、onPageFinished()
和onReceivedError()
方法。他们是俱乐部的成员。你子分类错了
如果您在每个方法上方添加@Override
注释,您的IDE应该大声告诉您这些方法不会覆盖超类中的任何内容,这就是为什么该注释很有用的原因
只需将这些覆盖移动到WebViewClient
实例
myWebView.setWebViewClient(new WebViewClient() {
private boolean error;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
...
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
...
}
@Override
public void onPageFinished(WebView view, String url) {
...
}
}
);
myWebView.setWebChromeClient(new WebChromeClient());
覆盖那些有意义的方法。WebChromeClient是否有其他方法?我试图寻找一些,但我能找到的最接近的东西是onProgressChanged,我真的需要找到一些错误。好吧,你可以使用
onProgressChanged()
,效果与onPageStarted()
和onPageFinished()
相同,但这并不是真的必要。您所需要做的就是将整个方法块移动到另一个对象;i、 例如,将其移到new WebViewClient()
的末尾。非常感谢。出于某种原因,我认为WebViewClient是WebChromeClient的替代品,而不是它们一起工作。不,它们是独立的东西,您可以同时使用它们。我从来没有真正弄明白他们为什么使用两个不同的类,但这就是生活。干杯