android 如何修复此错误;错误:方法不重写或实现父类型中的方法?

e1xvtsh3  于 2022-11-03  发布在  Android
关注(0)|答案(2)|浏览(251)

我有一个工作的Android webview应用程序,我用Android Studio,我需要让它打开外部包含“_blank”的链接.我添加了下面的代码

  1. @Override
  2. public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
  3. {
  4. WebView.HitTestResult result = view.getHitTestResult();
  5. String data = result.getExtra();
  6. Context context = view.getContext();
  7. Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
  8. context.startActivity(browserIntent);
  9. return false;
  10. }

但是代码“@Override”的第一行显示了下面的错误

  1. > Task :app:compileDebugJavaWithJavac FAILED
  2. ...\MainActivity.java:58: error: method does not override or implement a method from a supertype
  3. @Override
  4. ^
  5. Note: ...\MainActivity.java uses or overrides a deprecated API.
  6. Note: Recompile with -Xlint:deprecation for details.
  7. 1 error

以下是完整的“MainActivity”代码

  1. import android.annotation.SuppressLint;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.net.http.SslError;
  6. import android.os.Bundle;
  7. import android.view.KeyEvent;
  8. import android.webkit.SslErrorHandler;
  9. import android.webkit.WebView;
  10. import android.webkit.WebViewClient;
  11. import androidx.appcompat.app.AppCompatActivity;
  12. public class MainActivity extends AppCompatActivity implements Main_Activity, Main__Activity {
  13. WebView webView;
  14. @SuppressLint("SetJavaScriptEnabled")
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. webView = findViewById(R.id.web);
  20. webView.getSettings().setJavaScriptEnabled(true);
  21. webView.getSettings().setSupportZoom(false);
  22. webView.getSettings().setDomStorageEnabled(true);
  23. webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  24. webView.getSettings().setSupportMultipleWindows(true);
  25. webView.getSettings().setUseWideViewPort(false);
  26. webView.setWebViewClient(new WebViewClient() {
  27. });
  28. webView.loadUrl("file:///android_asset/app.html");
  29. }
  30. public class myWebViewClient extends WebViewClient{
  31. @Override
  32. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  33. view.loadUrl(url);
  34. return true;
  35. }
  36. @Override
  37. public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
  38. webView.loadUrl("file:///android_asset/error.html");
  39. }
  40. @Override
  41. public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  42. super.onReceivedSslError(view, handler, error);
  43. handler.cancel();
  44. }
  45. @Override
  46. public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
  47. {
  48. WebView.HitTestResult result = view.getHitTestResult();
  49. String data = result.getExtra();
  50. Context context = view.getContext();
  51. Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
  52. context.startActivity(browserIntent);
  53. return false;
  54. }
  55. }
  56. @Override
  57. public boolean onKeyDown(int keyCode, KeyEvent event) {
  58. if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
  59. webView.goBack();
  60. return true;
  61. }
  62. return super.onKeyDown(keyCode, event);
  63. }
  64. }

我已经尝试了几个位置的代码,但错误仍然存在。我想摆脱错误,并实现的原因,我添加了代码;在webview应用程序外打开目标”_blank”。

9bfwbjaz

9bfwbjaz1#

转到建立gradle(项目)或设置
在前面插入此行

  1. repositories {
  2. google()
  3. maven Central()
  4. } //

在插入这一行之前插入这一行-〉imagex 1c 0d1x和#同步项目#android_Studio

6tr1vspr

6tr1vspr2#

该错误告诉您问题所在。WebViewClient没有任何名为onCreateWindow的方法。

WebChromeClient确实如此

  1. public class MyChromeViewClient extends WebChromeClient {
  2. @Override
  3. public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
  4. {
  5. WebView.HitTestResult result = view.getHitTestResult();
  6. String data = result.getExtra();
  7. Context context = view.getContext();
  8. Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
  9. context.startActivity(browserIntent);
  10. return false;
  11. }
  12. }

WebView可以同时拥有这两个版本,因此您只需创建自己的WebChromeClient版本并将其添加到其中。

  1. // Also BTW you are not using your implementation - it should be new myWebViewClient()
  2. webView.setWebViewClient(new WebViewClient());
  3. //webView.setWebViewClient(new myWebViewClient());
  4. webView.setWebChromeClient(new MyChromeViewClient());
展开查看全部

相关问题