Мое приложение для Android выдает исключение RuntimeException - PullRequest
0 голосов
/ 25 ноября 2011

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): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 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): в 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): в 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 (Handler.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): в 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 / AndroidRuntime (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): в android.app.ActivityThread.performResumeActivity (ActivityThread.java:3118) 11-25 12: 33: 34,697: E / AndroidRuntime (494): ... еще 12

Blockquote

Ответы [ 3 ]

5 голосов
/ 25 ноября 2011

Вы действительно близко. Вам просто нужно переместить код, который загружает 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)
    }
  }
1 голос
/ 25 ноября 2011

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

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

1 голос
/ 25 ноября 2011

В основном вам просто нужно взглянуть на поток Activity Lifecycle .

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

...