2011-12-28 17 views
0

私のAndroidアプリでは、新しいエミュレータを作成して初めてWebviewに書き込もうとすると、アクティブではありません。私はテキストフィールドに書き込むことはできませんし、アプリケーションがクラッシュします。アプリをリロードすると、すべて正常に動作します。初めてWebviewがクラッシュするのはなぜですか?

コード:OnCreateイベントで

String url = "http://api.vkontakte.ru/oauth/authorize?client_id=2731649&scope=wall,notify,docs&" + 
      "redirect_uri=http://api.vkontakte.ru/blank.html&display=wap&response_type=token"; 
    WebViewClass wvClforVK = new WebViewClass(); 

:buttonclickオン

webview= (WebView) findViewById(R.id.vkWebView); 
     webview.setWebViewClient(wvClforVK); 

webview.loadUrl(url); 
in wvClforVK 
@Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
      return true; 
     } 
+0

'findViewById(R.id.vkWebView)'を呼び出す前に 'setContentView(...)'を呼び出していますか? – Squonk

+0

これはthis.setContentView(R.layout.main)です。 ? yes –

+0

はい、そうです(あなたのレイアウトファイルが 'main.xml'と呼ばれている限り)。あなたのコメントに表示されているように、 'R.layout.'を使用しているときに.xml部分を置かないでください。 'R.id.vkWebView'のようなコンポーネントを使用する前に、コンテンツビューを設定する必要があります。コンテンツビューを設定する前に 'findViewById'を使用すると、' null'が返されます。 – Squonk

答えて

1

あなたはこのようなあなたのR.などの任意のコンポーネントを使用する前に、コンテンツビューを設定する必要がありますid.vkWebView。コンテンツビューを設定する前にfindViewById(...)を使用すると、nullが返されます。コンテンツビューの呼び出しを設定するには

...

setContentView(R.layout.main); 

...あなたのレイアウトファイルをmain.xmlと呼ばれているが、R.layoutを使用しているとき、あなたがそれに.xmlの一部を入れていないと仮定。通常、コンテンツビューは、アクティビティの早い段階で可能な限りonCreate(...)メソッドに設定します。ご希望のURLのロードを開始する前に:これは、多くの場合、アンドロイド4.2.2用super.onCreate(...);

+0

この回答は、私が持っていた問題を解決しました。 loadUrlの後にsetContentViewを呼び出すと、クラッシュが発生しました。私のWebViewコードの前にsetContentViewを移動すると、私が直面していたクラッシュが修正されました。 – Lev

1

への呼び出しの直後に行われ、 は(「ブランクについて」)loadUrlを追加します。

ので、最終的なコードは、私がアンドロイド4.2.2クラッシュに私のアプリを実行したときに、私のWebViewのURLをロードしようとするたび、loadUrl("about:blank")を追加する前に

WebView webView = (WebView)findViewById(R.id.my_web_view); 
webview.loadUrl("about:blank"); 
webview.loadUrl("https://google.com"); 

です。

+0

これはありがとう、それは私のためのクラッシュを解決します。しかし、なぜこれはうまくいくのですか? :/ – QuantumTiger

関連する問題