Titanium opening Alloy controller from button click 异常

Titanium opening Alloy controller from button click exception

所以这在 iOS 中似乎工作正常,但在 Android 中,当我创建一个控制器并通过按下按钮打开它的视图时。

这是我调用的代码:

function goToWebView(){
    win.close();
    var test = Alloy.createController('web').getView();
    test.open();
}

...

button.addEventListener('click',function(e)
{
    Ti.API.info("Button clicked!")
    goToWebView(); //<-- exceptions start here, only on Android
});

它给出了这些例外:

(干净格式:http://pastebin.com/8f6cCh1X

[ERROR] : TiApplication: (main) [4929,5505] Sending event: exception on thread: main msg:java.lang.NullPointerException: Attempt to invoke virtual method 'void org.appcelerator.titanium.TiBaseActivity.addOnLifecycleEventListener(org.appcelerator.titanium.TiLifecycle$OnLifecycleEvent)' on a null object reference; Titanium 3.4.1,2014/11/13 13:33,5982e8f [ERROR] : TiApplication: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.appcelerator.titanium.TiBaseActivity.addOnLifecycleEventListener(org.appcelerator.titanium.TiLifecycle$OnLifecycleEvent)' on a null object reference [ERROR] : TiApplication: at ti.modules.titanium.ui.WebViewProxy.createView(WebViewProxy.java:83) [ERROR] : TiApplication: at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:483) [ERROR] : TiApplication: at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:225) [ERROR] : TiApplication: at ti.modules.titanium.ui.WebViewProxy.handleMessage(WebViewProxy.java:198) [ERROR] : TiApplication: at android.os.Handler.dispatchMessage(Handler.java:98) [ERROR] : TiApplication: at android.os.Looper.loop(Looper.java:135) [ERROR] : TiApplication: at android.app.ActivityThread.main(ActivityThread.java:5221) [ERROR] : TiApplication: at java.lang.reflect.Method.invoke(Native Method) [ERROR] : TiApplication: at java.lang.reflect.Method.invoke(Method.java:372) [ERROR] : TiApplication: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) [ERROR] : TiApplication: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

如果我也从超时调用 goToWebView() ,我会得到同样的异常。如果我不从按钮事件或某种回调中调用它,它在 Android 中工作,但如果它在回调中,它会给出这些异常。

我能做什么?

您正在关闭上下文,然后再打开另一个上下文。

function goToWebView(){
    win.close(); // <-- HERE
    var test = Alloy.createController('web').getView();
    test.open();
}

尝试反转它:

function goToWebView(){
    var test = Alloy.createController('web').getView();
    test.open();
    win.close();
}

顺便说一句,如果 win 是您的主要 window,通常您不需要 .close 因为它启用了 exitOnClose