jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery-mobile – Phonegap和C2DM – NullPointerException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用C2DM和PhoneGap.当我收到C2DM消息时,我会显示一个通知(通过notificationmanager).当用户选择通知时,我的应用程序会收到意图.在这种情况下,我想在我的 jquery-mobile webapp中激活一个页面.

因此,我覆盖onNewIntent事件以存储intent:

@Override
protected void onNewIntent(final Intent intent)
{
    super.onNewIntent(intent);
    seTintent(intent);
}

然后,在onResume中,如果意图来自C2DM,我激活了正确的页面

@Override
protected void onResume()
{
    super.onResume();

    // read possible argument
    Boolean showmessage = geTintent().getBooleanExtra(ARG_SHOW_messaGES,falsE);
    if (showmessagE)
    {
        clearNotification();
        super.loadUrl("file:///android_asset/www/de/index.html#messages");
    }
}

这样可以正常工作,但有时会出现NullPointerException崩溃 – 不是在我的手机或模拟器上,而是在其他设备上. stacktrace表示它位于DroidGap活动的onNewIntent中,见Code

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    //ForWARD to plugins
    this.pluginManager.onNewIntent(intent);
}

我无法重现这种情况.显然pluginManager是null但我不是为什么.

所以问题是:

>采用的方法是从Android中选择jquery-mobile中的特定页面,还是有人指出更好的方法
>我怎样才能摆脱异常?当然我可以检查pluginManager是否为null,在这种情况下不要调用super – 但是我的特定页面没有被激活.
>你认为这是@L_20_1@phoneGap错误 – 不检查pluginmanager是否为null?当我检查PhoneGap代码时,我认为这应该永远不会发生,我的理解onNewIntent仅在加载活动时被调用,否则将触发onCreate.

更新
我现在知道的更多:当没有加载应用程序并且C2DM消息到达时出现问题.
意图启动应用程序,事件按以下顺序发生 – 但onNewIntent仅偶尔调用

onCreate()
onNewIntent()
onResume()

每当在启动期间执行onNewIntent时它就会崩溃.无论如何我修复了这个:

@Override
protected void onNewIntent(final Intent intent)
{
    // avoid Phonegap bug
    if (pluginManager != null)
    {
        super.onNewIntent(intent);
    }
    seTintent(intent);
}

当我想更改onResume-Event中的起始页时,当Phonegap没有准备好时,这不起作用.因此,在应用程序启动的情况下,只需尽早调用onResume中的#messages页面即可.但什么时候打电话呢?是否有可能挂钩onDeviceReady?

解决方法

我仍然不知道为什么有时onNewIntent会在应用程序启动期间触发(不仅仅是激活),有时也不会.无论如何,我通过一些解决方法解决了所有问题.

在我的活动中,我创建了一个函数(不相关的部分被剥离):

public void onDeviceReady()
{
    if (!isReady)
    {
        super.loadUrl("file:///android_asset/www/en/index.html#messages");
    }

    // activate onResume instead
    isReady = true;
}

以及上面的布尔标志:

/** Is PhoneGap ready? */
private Boolean isReady = false;

我在onCreate事件中激活回调:

// CallBACk setzen
appView.addJavascripTinterface(this,"Android");

并从Javascript onDeviceReady调用

if (OSName == "Android")
{
    window.Android.onDeviceReady();
}

在onResume事件中,我使用协商逻辑:

protected void onResume()
{
    super.onResume();

    if (isReady)
    {
        super.loadUrl("file:///android_asset/www/en/index.html#messages");
    }
}

这保证了页面选择只在onResume或onDeviceReady中执行一次.

大佬总结

以上是大佬教程为你收集整理的jquery-mobile – Phonegap和C2DM – NullPointerException全部内容,希望文章能够帮你解决jquery-mobile – Phonegap和C2DM – NullPointerException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。