在android上使用passwordMask或keyboardType设置崩溃的textfield

时间:2012-04-20 11:43:04

标签: android titanium-mobile

我有一个工厂类,可以为我动态创建输入窗口。创建这个工厂类的原因是为了简化输入窗口的创建,因为我有很多它们。我们目前正在将我们的应用程序从iOS移植到android,就在我们发现这个问题的时候。

我正在尝试创建像这样的文本字段:

  textField = Ti.UI.createTextField
    left: indentLeft
    right: 10
    color: "#336699"
    borderStyle: Ti.UI.INPUT_BORDERSTYLE_NONE
    field: field
    hintText: field.hint
    value: field.value
    tag: field.name
    autocorrect: field.autocorrect
    autocapitalization: field.autocapitalization
    enabled: (field.enabled != false)
    keyboardType: field.keyboardType
    passwordMask: field.passwordMask
    returnKeyType: Ti.UI.RETURNKEY_DEFAULT
    textAlign: field.textAlign

这在iOS上运行得非常好,而且根据titianium文档,field.keyboardType和field.passwordMask指定的值是完全合法的值。但是,我的Android应用程序崩溃,除非我注释掉passwordMask和keyboardType ...任何想法为什么会发生这种情况?下面是android crashlog:

 E/TiApplication( 1216): (main) [249,918] Sending event: exception on thread: main msg:java.lang.IllegalArgumentException: Unable to convert null to boolean.; Titanium 2.0.1,2012/04/12 16:36,999c68a
    E/TiApplication( 1216): java.lang.IllegalArgumentException: Unable to convert null to boolean.
    E/TiApplication( 1216):     at org.appcelerator.titanium.util.TiConvert.toBoolean(TiConvert.java:342)
    E/TiApplication( 1216):     at org.appcelerator.titanium.util.TiConvert.toBoolean(TiConvert.java:355)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.TiUIText.handleKeyboard(TiUIText.java:368)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.TiUIText.processProperties(TiUIText.java:171)
    E/TiApplication( 1216):     at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:737)
    E/TiApplication( 1216):     at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:530)
    E/TiApplication( 1216):     at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:522)
    E/TiApplication( 1216):     at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:500)
    E/TiApplication( 1216):     at org.appcelerator.titanium.proxy.TiViewProxy.forceCreateView(TiViewProxy.java:485)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.refreshControls(TiTableViewRowProxyItem.java:133)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:280)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:84)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(TiTableView.java:216)
    E/TiApplication( 1216):     at android.widget.AbsListView.obtainView(AbsListView.java:1315)
    E/TiApplication( 1216):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
    E/TiApplication( 1216):     at android.widget.ListView.fillDown(ListView.java:652)
    E/TiApplication( 1216):     at android.widget.ListView.fillSpecific(ListView.java:1284)
    E/TiApplication( 1216):     at android.widget.ListView.layoutChildren(ListView.java:1570)
    E/TiApplication( 1216):     at android.widget.AbsListView.onLayout(AbsListView.java:1147)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    E/TiApplication( 1216):     at ti.modules.titanium.ui.widget.tableview.TiTableView.onLayout(TiTableView.java:516)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:519)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
    E/TiApplication( 1216):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
    E/TiApplication( 1216):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    E/TiApplication( 1216):     at android.view.View.layout(View.java:7035)
    E/TiApplication( 1216):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
    E/TiApplication( 1216):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
    E/TiApplication( 1216):     at android.os.Handler.dispatchMessage(Handler.java:99) 
    E/TiApplication( 1216):     at android.os.Looper.loop(Looper.java:123)
    E/TiApplication( 1216):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    E/TiApplication( 1216):     at java.lang.reflect.Method.invokeNative(Native Method)
    E/TiApplication( 1216):     at java.lang.reflect.Method.invoke(Method.java:521)
    E/TiApplication( 1216):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    E/TiApplication( 1216):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    E/TiApplication( 1216):     at dalvik.system.NativeStart.main(Native Method)
D/dalvikvm( 1216): GC_FOR_MALLOC freed 4053 objects / 380032 bytes in 77ms

1 个答案:

答案 0 :(得分:0)

at org.appcelerator.titanium.util.TiConvert.toBoolean(TiConvert.java:342)

上面的错误表明在第342行的TiConvert.java类中,你试图将空值转换为布尔检查它。