Мое приложение для Android выдает исключение RuntimeException

Приложение для Android теперь выдает ошибку:

package com.martijngijselaar.rooster;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends MainActivity {

    private WebView myWebView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

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

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

        myWebView.setWebViewClient(new WebViewClient());

        myWebView.requestFocus(View.FOCUS_DOWN);
        myWebView.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_UP:
                        if (!v.hasFocus()) {
                            v.requestFocus();
                        }
                        break;
                }
                return false;
            }
        });
    }   

    public void onResume() {
        super.onResume();
        if ( isOnline() == true )
            myWebView.loadUrl(webLink);
        else if ( isOnline() == false )
            showNoConnectionDialog();
    }
}

И это логарифм:

11–25 12:33:34.697: E/AndroidRuntime(494): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main 11–25 12:33:34.697: E/AndroidRuntime(494): java.lang.RuntimeException: невозможно возобновить активность {com.martijngijselaar .rooster/com.martijngijselaar.rooster.WebviewActivity}: java.lang.NullPointerException 11-25 12:33:34.697: E/AndroidRuntime(494): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128) 11- 25 12:33:34.697: E/AndroidRuntime(494): в android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143) 11-25 12:33:34.697: E/AndroidRuntime(494): в android.app. ActivityThread.handleLaunchActivity(ActivityThread.java:2684) 11–25 12:33:34.697: E/AndroidRuntime(494): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 11–25 12:33:34.697 : E/AndroidRuntime(494): в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 11-25 12:33:34.697: E/AndroidRuntime(494): в android.os.Handler.dispatchMessage( Обработчик.java:99 ) 11-25 12:33:34.697: E/AndroidRuntime(494): на android.os.Looper.loop(Looper.java:123) 11-25 12:33:34.697: E/AndroidRuntime(494): на android .app.ActivityThread.main(ActivityThread.java:4627) 11–25 12:33:34.697: E/AndroidRuntime(494): в java.lang.reflect.Method.invokeNative(собственный метод) 11–25 12:33: 34.697: E/AndroidRuntime(494): в java.lang.reflect.Method.invoke(Method.java:521) 11-25 12:33:34.697: E/AndroidRuntime(494): в com.android.internal.os .ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-25 12:33:34.697: E/AndroidRuntime(494): в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11- 25 12:33:34.697: E/AndroidRuntime(494): at dalvik.system.NativeStart.main(собственный метод) 11-25 12:33:34.697: E/AndroidRuntime(494): вызвано: java.lang.NullPointerException 11-25 12:33:34.697: E/AndroidRuntime(494): в com.martijngijselaar.rooster.WebviewActivity.onResume(WebviewActivity.java:46) 11-25 12:33:34.697: E/Android Время выполнения(494): в android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149) 11-25 12:33:34.697: E/AndroidRuntime(494): в android.app.Activity.performResume(Activity.java:3823 ) 11-25 12:33:34.697: E/AndroidRuntime(494): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118) 11-25 12:33:34.697: E/AndroidRuntime(494): .. , еще 12

Цитата


person MartijnG    schedule 25.11.2011    source источник
comment
пожалуйста, добавьте код, который вы пробовали в своем методе onResume, добавили ли вы в него requestfeature() ?? если да, удалите его, он уже добавлен в ваш метод onCreate, или просто переопределите метод onStart(); и добавьте к нему строку requestfeature и удалите ее из других методов ( onCreate, onResume )   -  person Houcine    schedule 25.11.2011


Ответы (3)


Вы действительно близки. Вам просто нужно переместить код, который загружает URL-адрес, в onResume:

public void onResume(){
super.onResume();
 if ( isOnline() == true )
            myWebView.loadUrl(webLink);
}

onResume вызывается сразу после onCreate, поэтому он будет вызываться как при первой загрузке, так и при возврате из паузы.

Обновление на основе обсуждения в комментариях: Чтобы переместить веб-представление в переменную экземпляра:

public class WebviewActivity extends MainActivity {

  private WebView myWebView;

  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    myWebView = (WebView)findViewById(R.id.webview);
     //the rest of your onCreate method here)
    }
  }
person Chris    schedule 25.11.2011
comment
У меня остался один небольшой вопрос: как сделать myWebView.loadUrl(weblink); доступным в onResume? Пишет: myWebView не может быть разрешен... - person MartijnG; 25.11.2011
comment
Объявите mWebView как переменную экземпляра класса, а не как локальную (переместите объявление за пределы метода конструктора и поместите его сразу после объявления вашего класса). - person Chris; 25.11.2011
comment
Может быть, вы можете привести мне короткий пример? Спасибо! - person MartijnG; 25.11.2011
comment
Я добавил пример в свой ответ. - person Chris; 25.11.2011
comment
Извините, что беспокою вас снова, но теперь это выдает мне ошибку... Я сделал все в точности, как вы сказали, и он говорит: Невозможно возобновить активность, java.lang.nullpointerexeption... Что я делаю? неправильный? Вылетает при запуске... - person MartijnG; 25.11.2011
comment
Можете ли вы обновить свой вопрос с вашим обновленным кодом, а также трассировкой стека (или, по крайней мере, указать, какая строка является причиной NullPointerException)? - person Chris; 25.11.2011
comment
Удалите эту строку из onCreate: WebView myWebView = (WebView)findViewById(R.id.webview); и замените его на myWebView = (WebView)findViewById(R.id.webview); (обратите внимание, я не объявлял тип переменной). - person Chris; 25.11.2011
comment
Ах, я просто проглядел это, теперь он работает отлично :) Еще раз спасибо!! Хорошего дня :) - person MartijnG; 25.11.2011

По сути, вам просто нужно взглянуть на поток жизненного цикла деятельности.

Просто оставьте инициализацию в onCreate и проверьте наличие WIFI и диалогового окна запуска в onResume.

person pdt    schedule 25.11.2011

Вы правильно делаете, создавая все в onCreate. onResume выполняется, когда вы включаете экран и устройство просыпается, поэтому подумайте о логических вещах, которые вы должны сделать тогда: обновить графику, которую необходимо обновить, перезапустить связь Bluetooth или Wi-Fi, если они были отключены, и т. д.

Взгляните на схему жизненных циклов Activity в Android Developers, чтобы узнать, как это работает.

person Roman Rdgz    schedule 25.11.2011