我的Android应用程序抛出RuntimeException

时间:2011-11-25 11:18:10

标签: android webview connection onresume

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

这是logcat:

  

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):at   android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)   11-25 12:33:34.697:E / AndroidRuntime(494):at   android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)   11-25 12:33:34.697:E / AndroidRuntime(494):at   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):at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)   11-25 12:33:34.697:E / AndroidRuntime(494):at   android.os.Handler.dispatchMessage(Handler.java:99)11-25   12:33:34.697:E / AndroidRuntime(494):at   android.os.Looper.loop(Looper.java:123)11-25 12:33:34.697:   E / AndroidRuntime(494):at   android.app.ActivityThread.main(ActivityThread.java:4627)11-25   12:33:34.697:E / AndroidRuntime(494):at   java.lang.reflect.Method.invokeNative(Native Method)11-25   12:33:34.697:E / AndroidRuntime(494):at   java.lang.reflect.Method.invoke(Method.java:521)11-25 12:33:34.697:   E / AndroidRuntime(494):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)   11-25 12:33:34.697:E / AndroidRuntime(494):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)11-25   12:33:34.697:E / AndroidRuntime(494):at   dalvik.system.NativeStart.main(Native Method)11-25 12:33:34.697:   E / AndroidRuntime(494):引起:java.lang.NullPointerException 11-25   12:33:34.697:E / AndroidRuntime(494):at   com.martijngijselaar.rooster.WebviewActivity.onResume(WebviewActivity.java:46)   11-25 12:33:34.697:E / AndroidRuntime(494):at   android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)   11-25 12:33:34.697:E / AndroidRuntime(494):at   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更多

     

块引用

3 个答案:

答案 0 :(得分:5)

你真的很亲密。您只需将加载url的代码移动到onResume:

public void onResume(){
super.onResume();
 if ( isOnline() == true )
            myWebView.loadUrl(webLink);
}
在onCreate之后立即调用

onResume,因此它将在第一次加载和从暂停返回时被调用。

根据评论中的讨论进行更新: 要将Web视图移动到实例变量:

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 :(得分:1)

基本上你只需要查看Activity Lifecycle流程。

只需将初始化保留在onCreate中,然后检查onResume中的WIFI和启动对话框。

答案 2 :(得分:1)

您正在创建onCreate中的所有内容。当你打开屏幕和设备唤醒时执行onResume,所以想想你应该做的逻辑事情:刷新需要刷新的图形,重新启动蓝牙或wifi通信,如果它们被关闭等等

查看Android开发者中的活动生命周期的架构,了解其工作原理。