2015-01-04 38 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