2011-10-25 9 views
2

I取り組んでいる次のコードを持っているが、私は、ボタンのアプリがクラッシュし、ハードウェアを打ち返すとき にonKeyDownメソッドクラッシュするアプリ

package com.fnesse.tmpmobile; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Window; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

@SuppressWarnings("unused") 
public class TmpmobileActivity extends Activity 
{ 
WebView webView; 
final Activity activity = this;  

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
     setContentView(R.layout.main); 
     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setBackgroundColor(0x00000000); 
     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

     webView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) 
     { 
      activity.setTitle("Loading..."); 
      activity.setProgress(progress * 100); 

      if(progress == 100) 
       activity.setTitle(R.string.app_name); 
     } 
     }); 

     webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
     { 
      //Error Code Here 
     } 

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

    }); 

    webView.loadUrl("http://www.themorningtonpeninsula.com"); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
     webView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
    } 
} 
私は追加する必要があるとどこかで見つけ

WebView webView; 

webViewで解決できるonCeateメソッドの上です。だから私はエラーは表示されませんが、クラッシュし、アプリケーションが私の携帯電話で実行されますが、ハードウェアの戻るボタンを押すとクラッシュします。

誰もがそれが起こっている理由を知っていますか?

乾杯、

マイク。

答えて

5

私はエラーメッセージで自分の魔法のゲストをやろうとします。私は、このエラーは、webView変数を初期化する方法によって引き起こされると思います。

WebView webView = (WebView) findViewById(R.id.webview); 

しかし、この再宣言ステップは、クラスレベルでのwebViewを結果:あなたはwebViewを初期化しても再びそれを再宣言onCreate()に、

WebView webView; 

そして:あなたは、あなたが宣言し、クラスレベルで、参照します初期化されていない。中に、

WebView webView = (WebView) findViewById(R.id.webview); 

:それを修正する

、この行を変更しようと

webView = (WebView) findViewById(R.id.webview); 

そして、あなたは今、クラスレベルwebViewは初期化され、あなたが持っているどんな方法で使用するための準備ができているはずです。あなたののonCreate()メソッドの代わりに、クラスフィールドのWebViewで新しいのWebViewを作成している

+0

あなたサー/マダム問題だったチャンピオン、です。 乾杯、 マイク。 –

0

は、ここでのJavaの変数のスコープを説明するいくつかのリソースです。

WebView webView = (WebView) findViewById(R.id.webview); 

を変更します。

webView = (WebView) findViewById(R.id.webview); 
+0

それは上に述べた沈黙です! –

関連する問題