【问题标题】:Opening app from push notification causes NullPointerException从推送通知打开应用程序会导致 NullPointerException
【发布时间】:2018-03-18 02:27:51
【问题描述】:

我使用 Codename One 创建了一个应用,但在 Android 上的推送通知出现问题。

当应用未在后台打开时打开推送通知时会出现此问题。

当它尝试使用主题中的任何资源时,会导致 NullPointerException。主题在 init() 方法中初始化,但在打开推送通知时似乎没有发生。

如果我随后以与空指针相同的方法初始化主题,就在它发生之前,它可以工作。然后它继续在方法中进一步导致一个空指针。

当应用程序未在后台打开时,为什么在打开推送通知时某些对象似乎未在 android 上初始化?

使用主题时最初导致NullPointerException的行是

Image icon = theme.getImage("ADINlogoRound.png");

我的初始化方法是

public void init(Object context) {
    theme = UIManager.initFirstTheme("/theme");
    Resources css = null;
    try {
        css = Resources.openLayered("/theme.css");
    } catch (IOException ex) {
    }
    UIManager.getInstance().addThemeProps(css.getTheme(css.getThemeResourceNames()[0]));

    // Enable Toolbar on all Forms by default
    Toolbar.setGlobalToolbar(true);

    Log.bindCrashProtection(true);

    Display.getInstance().lockOrientation(true);
}

【问题讨论】:

  • 您应该发布堆栈跟踪和导致 NPE 的代码。很难说否则会出什么问题。
  • 我已经添加了导致问题的代码。我将尝试获取屏幕上显示的堆栈跟踪信息,但这很困难,因为该应用程序正在生产中并且无法使用模拟器进行复制。

标签: codenameone


【解决方案1】:

似乎在 android 中,从推送通知打开应用程序时不会调用 init 和 start 方法。在这些方法中所做的任何事情也应该在 push 方法中完成。

【讨论】:

  • 有 3 种基本情况可以调用 push。冷(应用程序根本没有运行),后台(应用程序已最小化),前台。这三个都有自己非常依赖于平台的行为。对于某些推送类型,您不能依赖已经存在的 UI,您需要防范这种情况。请注意,如果应用程序确实进入前台,将调用 init/start,因此您不应该只是“重做”那里的内容。相反,您应该稍后存储应用初始化的状态数据
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多