2011-12-28 2 views
0

В моем приложении для Android, когда я создаю новый эмулятор и пытаюсь писать в webview в первый раз, он неактивен. Я не могу писать в текстовом поле, а затем приложение падает. Если я перезагружу приложение, все будет работать нормально.Почему сбой при первом запуске Webview?

Код:

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(); 

В OnCreate:

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

На ButtonClick:

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

Вы вызываете 'setContentView (...)' ПЕРЕД вызовом 'findViewById (R.id.vkWebView)'? – Squonk

+0

это this.setContentView (R.layout.main); ? yes –

+0

Да, это должно быть (до тех пор, пока ваш файл макета называется 'main.xml'). Вы не помещаете его .xml при использовании 'R.layout.', как вы покажете в своем комментарии. Вы должны установить представление содержимого, прежде чем пытаться использовать любые компоненты, такие как ваш 'R.id.vkWebView'. Если вы используете 'findViewById' перед настройкой содержимого, он вернет' null' – Squonk

ответ

1

Вы должны установить вид контента, прежде чем пытаться использовать любые компоненты, такие как ваш R. id.vkWebView. Если вы используете findViewById(...) перед настройкой содержимого, он вернет значение null.

Чтобы установить вид вызова контента ...

setContentView(R.layout.main); 

... предполагается, что ваш файл макета называется main.xml, но не поставить .xml часть на ней при использовании R.layout. Обычно вы устанавливаете представление контента как можно раньше в методе onCreate(...). Это часто делается сразу после звонка super.onCreate(...);

+0

Этот ответ исправил проблему, с которой я столкнулся. У меня был вызов setContentView после попытки loadUrl, который вызвал сбой. Перемещение setContentView до того, как какой-либо из моего кода WebView зафиксировал сбой, с которым я столкнулся. – Lev

1

Для android 4.2.2, Перед загрузкой нужного URL-кода добавьте loadUrl («about: blank»).

Итак, окончательный код

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

Перед добавлением loadUrl("about:blank"), когда я бегу мое приложение на андроид 4.2.2 аварии каждый мой WebView попытке загрузить URL.

+0

Спасибо за это, это тоже решает проблему. Но ПОЧЕМУ это работает !? : / – QuantumTiger

Смежные вопросы