4

我在这个类上得到一个 WebView 异常,但它没有指定哪一行。这是一个例外:

java.lang.NullPointerException
        at android.webkit.ZoomManager.onSizeChanged(ZoomManager.java:955)
        at android.webkit.WebViewClassic.onSizeChanged(WebViewClassic.java:5634)
        at android.webkit.WebView.onSizeChanged(WebView.java:2147)
        at android.view.View.sizeChange(View.java:14400)
        at android.view.View.setFrame(View.java:14375)
        at android.webkit.WebView.access$701(WebView.java:239)
        at android.webkit.WebView$PrivateAccess.super_setFrame(WebView.java:1778)
        at android.webkit.WebViewClassic.setFrame(WebViewClassic.java:5610)
        at android.webkit.WebView.setFrame(WebView.java:2141)
        at android.view.View.layout(View.java:14286)
        at android.view.ViewGroup.layout(ViewGroup.java:4562)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
        at android.view.View.layout(View.java:14289)
        at android.view.ViewGroup.layout(ViewGroup.java:4562)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
        at android.view.View.layout(View.java:14289)
        at android.view.ViewGroup.layout(ViewGroup.java:4562)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
        at android.view.View.layout(View.java:14289)
        at android.view.ViewGroup.layout(ViewGroup.java:4562)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
        at android.view.Choreographer.doCallbacks(Choreographer.java:562)
        at android.view.Choreographer.doFrame(Choreographer.java:532)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
        at android.os.Handler.handleCallback(Handler.java:730)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)

这是代码:

import com.flurry.android.FlurryAgent;

import utils.SendEmail;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.PluginState;

public class YoutubeActivity extends Activity
{
    WebView webview = null;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);   
        webview = new WebView(this);
        setContentView(webview);

//      long timeout = ViewConfiguration.getZoomControlsTimeout();
//      new Timer().schedule(new TimerTask() {
//          @Override
//          public void run() {
//              webview.destroy();
//          }
//      }, timeout);


        webview.getSettings().setAppCacheEnabled(false);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setInitialScale(1);
        webview.getSettings().setPluginState(PluginState.ON);

        WebSettings webSettings = webview.getSettings();

        webSettings.setLoadsImagesAutomatically(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setBuiltInZoomControls(true);        
        //webSettings.setAllowContentAccess(true);
        //webSettings.setSupportZoom(true);
        webSettings.setUseWideViewPort(true);

        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);              
                return false;
            }
        });        


        webview.setWebChromeClient(new WebChromeClient(){});

        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAppCacheEnabled(true);
        webSettings.setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache");
        webSettings.setDatabaseEnabled(true);
        webSettings.setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases");
        //webSettings.setUserAgentString("Dolphin");

        //webview.loadUrl("http://javatester.org/javascript.html");    


        webview.loadUrl("http://www.youtube.com/user/Okudjavavich");    
//      webview.loadUrl("http://www.youtube.com/g33ktalktv");

    }



    @Override
    public void onPause()
    {
       super.onPause();
       // your code

       webview.clearCache(true); 
       webview.getSettings().setAppCacheEnabled(false);
       webview.clearView();
       webview.stopLoading();
       webview.destroy();
       this.finish();
    }


    @Override
    public void onDestroy()
    {
       super.onDestroy();
       // your code

       try
       {
           webview.getSettings().setBuiltInZoomControls(true);

       }
       catch ( Exception e )
       {

       }    
    }




    @Override
    public void onStop()
    {
       super.onStop();
       // your code

       FlurryAgent.onEndSession(this);

       //webview.goBack();
       try
       {
           webview.clearView();
           webview.getSettings().setAppCacheEnabled(false);
           webview.stopLoading();
           webview.destroy();
       }
       catch ( Exception e )
       {

       }

       this.finish();
    }   

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) 
        {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }   

    //@Override 
    public void onPageFinished(WebView view, String url) 
    { 
        //super.onPageFinished(view, url); 
        view.clearCache(true); 
    }

    public void onBackPressed ( )
    {
        webview.clearView();
    }


    @Override
    protected void onStart()
    {
        super.onStart();
        FlurryAgent.onStartSession(this, "4VYNFK3V6RCZ53CZ3J32");
    }    
}

这发生在 Android 4.3 上。有人知道如何阻止这次崩溃吗?我无法重现它,但我在我的崩溃报告中看到了它。

4

0 回答 0