2015-01-04 37 views
0

我想做一个基本的webview应用程序,但它给4错误。基本的webview应用程序问题

Error:(35, 9) error: method does not override or implement a method from a supertype

Error:(46, 32) error: non-static method canGoBack() cannot be referenced from a static context

Error:(47, 32) error: non-static method goBack() cannot be referenced from a static context

Error:Execution failed for task ':app:compileDebugJava'. Compilation failed; see the compiler error output for details.

谁能告诉我我的代码有什么问题吗?

这里是我的代码:

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.Window; 
import android.view.WindowManager; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
     setContentView(R.layout.activity_main); 

     WebView mainWebView = (WebView) findViewById(R.id.mainWebView); 

     WebSettings webSettings = mainWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     mainWebView.setWebViewClient(new MyCustomWebViewClient()); 
     mainWebView.loadUrl("http://facebook.com/"); 
    } 

    private class MyCustomWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch (keyCode) { 
       case KeyEvent.KEYCODE_BACK: 
        if (WebView.canGoBack()) { 
         WebView.goBack(); 
        } else { 
         finish(); 
        } 
        return true; 
      } 
     } 
    } 
} 

这是我的新代码现在在你们的帮助,显示没有错误,但仍然无法正常工作(无法完成gradle这个执行,当我尝试在运行它仿真器):

public class MainActivity extends ActionBarActivity { 
    private WebView mainWebView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
     setContentView(R.layout.activity_main); 

     mainWebView = (WebView) findViewById(R.id.mainWebView); 

     WebSettings webSettings = mainWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     mainWebView.setWebViewClient(new MyCustomWebViewClient()); 
     mainWebView.loadUrl("http://facebook.com/"); 
    } 

    private class MyCustomWebViewClient extends WebViewClient { 

     public boolean shouldOvrrideLoading (WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch (keyCode) { 
       case KeyEvent.KEYCODE_BACK: 
        if (mainWebView.canGoBack()) { 
         mainWebView.goBack(); 
        } else { 
         finish(); 
        } 
        return true; 
      } 
     } 
     return false; 
    } 
} 
+3

use'mainWebView' for调用'canGoBack'和'goBack'方法 – 2015-01-04 14:02:59

+1

实例方法需要从实例中调用。正如它在上面评论中说的“使用* mainWebView.canGoBack()*和* mainWebView.goBack()*” – Rami 2015-01-04 14:06:55

回答

1

错误实际上解释了什么是错的:

非静态方法GoBack的()不能从静态上下文中引用

你需要与你的实例化的web视图,以取代静态WebView.canGoBack()mainWebView.canGoBack()

这同样适用于WebView.goBack()

+0

我需要添加私人WebView mainWebView为此工作 – lakimens 2015-01-04 14:31:54

+0

我也不得不删除第二个@Override并添加一个返回声明在第三行,并说“问题解析包”或“不幸的是,应用程序已停止” – lakimens 2015-01-04 14:39:15

+0

请发布崩溃的堆栈跟踪,没有足够的信息来推断原因。 – 2015-01-04 14:40:34

-1

mainWebView变量应该是类MainActivity的对象

public class MainActivity extends ActionBarActivity { 
     private WebView mainWebView; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
      setContentView(R.layout.activity_main); 

      mainWebView = (WebView) findViewById(R.id.mainWebView); 

      WebSettings webSettings = mainWebView.getSettings(); 
      webSettings.setJavaScriptEnabled(true); 

      mainWebView.setWebViewClient(new MyCustomWebViewClient()); 
      mainWebView.loadUrl("http://facebook.com/"); 
     } 

     private class MyCustomWebViewClient extends WebViewClient { 
      @Override 
      public boolean shouldOverrideLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
     } 

     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       switch (keyCode) { 
        case KeyEvent.KEYCODE_BACK: 
         if (mainWebView.canGoBack()) { 
          mainWebView.goBack(); 
         } else { 
          finish(); 
         } 
         return true; 
       } 
      } 
     } 
    } 
+0

仅有代码的答案没有多大用处。想要写一些解释? – 2015-01-04 14:15:13

+0

这段代码没有给出任何错误,只不过我需要在第3行到最后一行添加return语句: } return true; } } return false; } } 但是,如果我尝试安装应用程序,它说“解析软件包时出现问题”,并在我的朋友的手机上安装,然后它说“不幸的是,应用程序已停止” – lakimens 2015-01-04 14:26:34

+0

一刻我修复 – SorryForMyEnglish 2015-01-04 14:31:25