android phonegap和菜单在webview中崩溃

android phonegap和菜单在webview中崩溃,android,cordova,menu,webview,Android,Cordova,Menu,Webview,我的应用程序面临一个奇怪的问题: 按下菜单按钮时,我的应用程序崩溃。但是仅当我在webview中启动应用程序时 这是有效的: super.loadUrl("http://www.url.com"); 菜单加载在这里,一切都很好,但由于我无法使用super.loadurl让“shouldOverrideUrlLoading”工作,所以我尝试直接将应用程序启动到webview中 mwebview.loadurl(“http://url.com"); 确实有效,但如果我按下菜单按钮,它将崩溃 我的菜

我的应用程序面临一个奇怪的问题:

按下菜单按钮时,我的应用程序崩溃。但是仅当我在webview中启动应用程序时

这是有效的:

super.loadUrl("http://www.url.com");
菜单加载在这里,一切都很好,但由于我无法使用super.loadurl让“shouldOverrideUrlLoading”工作,所以我尝试直接将应用程序启动到webview中

mwebview.loadurl(“http://url.com");
确实有效,但如果我按下菜单按钮,它将崩溃

我的菜单以编程方式制作,如下所示:

 @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        //Menu that appears when menu button is pressed on device
         Menu m_menu = menu;
         m_menu.add(Menu.NONE, Menu.FIRST+6, 0, "Hjem");
         m_menu.add(Menu.NONE, Menu.FIRST+7, 0, "Om");
         m_menu.add(Menu.NONE, Menu.FIRST+5, 0, "Avslutt");
         return super.onCreateOptionsMenu(menu);
        }
以下是我的活动:

 @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        super.setBooleanProperty("loadInWebView", true); 
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setBuiltInZoomControls(false);
        mWebView.requestFocusFromTouch();
        mWebView.setWebViewClient(new HelloWebViewClient());
        mWebView.setWebChromeClient(new WebChromeClient());

           getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN | 
            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            super.setIntegerProperty("splashscreen", R.drawable.splash);
            super.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            super.loadUrl("http://www.url.com/app/index");
//mWebView.loadurl("url");
            }
        private class HelloWebViewClient extends WebViewClient {
             @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

        }
以下是catlog中的错误:

03-03 10:00:26.893: E/AndroidRuntime(350): FATAL EXCEPTION: main
03-03 10:00:26.893: E/AndroidRuntime(350): java.lang.NullPointerException
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.phonegap.DroidGap.postMessage(DroidGap.java:943)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.phonegap.DroidGap.onCreateOptionsMenu(DroidGap.java:1374)
03-03 10:00:26.893: E/AndroidRuntime(350):  at blogreel.app.HelloAppActivity.onCreateOptionsMenu(HelloAppActivity.java:44)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.app.Activity.onCreatePanelMenu(Activity.java:2148)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:305)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:550)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1192)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1648)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.os.Looper.loop(Looper.java:123)
03-03 10:00:26.893: E/AndroidRuntime(350):  at android.app.ActivityThread.main(ActivityThread.java:4627)
03-03 10:00:26.893: E/AndroidRuntime(350):  at java.lang.reflect.Method.invokeNative(Native Method)
03-03 10:00:26.893: E/AndroidRuntime(350):  at java.lang.reflect.Method.invoke(Method.java:521)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-03 10:00:26.893: E/AndroidRuntime(350):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-03 10:00:26.893: E/AndroidRuntime(350):  at dalvik.system.NativeStart.main(Native Method)
所以我问: 当直接加载到webview时,有什么方法可以让我的菜单工作吗? 或者在使用“super.loadurl”时使“Shouldoverrideurl”在所有URL上工作

编辑 必须补充的是,super.loadurl加载的第一页确实有效。指定的url具有链接,单击该链接时,会在同一webview中重定向。但是,第二个页面的链接将在新浏览器中触发


非常感谢您的指点:)

这就是我如何为PhoneGap和常规Android Webview项目添加菜单按钮支持的方法

//basic menu button support
@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    super.onCreateOptionsMenu(menu);
    MenuItem item = menu.add("Refresh");
    item = menu.add("Quit");
    return true;
}

//handle menu item selection
public boolean onOptionsItemSelected(MenuItem item)
{
    if (item.hasSubMenu() == false)
    {
        if("Quit"==item.getTitle()) {
            finish();
        }
        if("Refresh"==item.getTitle()) {
           super.loadUrl("file:///android_asset/www/index.html");
        }
    }
    return true;
}

这就是我如何将菜单按钮支持添加到PhoneGap和常规Android Webview项目中的方法

//basic menu button support
@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    super.onCreateOptionsMenu(menu);
    MenuItem item = menu.add("Refresh");
    item = menu.add("Quit");
    return true;
}

//handle menu item selection
public boolean onOptionsItemSelected(MenuItem item)
{
    if (item.hasSubMenu() == false)
    {
        if("Quit"==item.getTitle()) {
            finish();
        }
        if("Refresh"==item.getTitle()) {
           super.loadUrl("file:///android_asset/www/index.html");
        }
    }
    return true;
}

嘿,谢谢你回复:)用这个方法你用了mWebView.loadurl而不是super.loadurl?您的方法在我的项目中崩溃,但我会继续尝试=)它告诉我menuitem item=menu.add行从未被读取。哼!不,我使用super.loadUrl(“file:///android_asset/www/index.html"); 我已经更新了我的示例,还注意到您执行super.onCreateOptions菜单(菜单);在您返回的方法结束时,更改为返回true;我想我必须使用super.loadurl来实现这一点。只是第一次页面加载后的链接会在新浏览器中打开。它打开的第一个窗口保持在相同的webview中,这是不需要的,这就是为什么我尝试使用mwebview.loadurl(它在menuclick上崩溃)。工作正常。。但是我收到消息“本地变量项永远不会被读取”嘿,谢谢你的回复:)用这个方法你用了mWebView.loadurl而不是super.loadurl?您的方法在我的项目中崩溃,但我会继续尝试=)它告诉我menuitem item=menu.add行从未被读取。哼!不,我使用super.loadUrl(“file:///android_asset/www/index.html"); 我已经更新了我的示例,还注意到您执行super.onCreateOptions菜单(菜单);在您返回的方法结束时,更改为返回true;我想我必须使用super.loadurl来实现这一点。只是第一次页面加载后的链接会在新浏览器中打开。它打开的第一个窗口保持在相同的webview中,这是不需要的,这就是为什么我尝试使用mwebview.loadurl(它在menuclick上崩溃)。工作正常。。但是我得到消息“本地变量项永远不会被读取”