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
。
所以这在 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
。