Uploaded image for project: 'Titanium SDK/CLI'
  1. Titanium SDK/CLI
  2. TIMOB-20089

Android: setting a view layout to null crashes the app

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: Release 5.2.0
    • Component/s: Android
    • Environment:

      android, titanium_mobile latest master version

    • Story Points:
      2
    • Sprint:
      2015 Sprint 24 SDK

      Description

      When setting a view's layout to "null", the app completely crashes:

      [ERROR] TiApplication: (main) [396,396] Sending event: exception on thread: main msg:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jolicode.testview/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference; Titanium 5.0.2,2015/09/30 12:07,92c2265
      [ERROR] TiApplication: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jolicode.testview/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
      [ERROR] TiApplication: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
      [ERROR] TiApplication: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
      [ERROR] TiApplication: 	at android.app.ActivityThread.access$800(ActivityThread.java:151)
      [ERROR] TiApplication: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
      [ERROR] TiApplication: 	at android.os.Handler.dispatchMessage(Handler.java:102)
      [ERROR] TiApplication: 	at android.os.Looper.loop(Looper.java:135)
      [ERROR] TiApplication: 	at android.app.ActivityThread.main(ActivityThread.java:5254)
      [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:903)
      [ERROR] TiApplication: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
      [ERROR] TiApplication: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
      [ERROR] TiApplication: 	at ti.modules.titanium.ui.widget.TiView.<init>(TiView.java:25)
      [ERROR] TiApplication: 	at ti.modules.titanium.ui.ViewProxy.createView(ViewProxy.java:33)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:485)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:471)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:509)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:493)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:471)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.handleAdd(TiViewProxy.java:672)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.proxy.TiViewProxy.add(TiViewProxy.java:566)
      [ERROR] TiApplication: 	at ti.modules.titanium.ui.WindowProxy.windowCreated(WindowProxy.java:237)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.TiActivityWindows.windowCreated(TiActivityWindows.java:33)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.TiBaseActivity.windowCreated(TiBaseActivity.java:458)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:551)
      [ERROR] TiApplication: 	at org.appcelerator.titanium.TiActivity.onCreate(TiActivity.java:18)
      [ERROR] TiApplication: 	at android.app.Activity.performCreate(Activity.java:5990)
      [ERROR] TiApplication: 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
      [ERROR] TiApplication: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
      [ERROR] TiApplication: 	... 10 more
      

      Steps to reproduce:

      • create a new Alloy application
      • app/controllers/index.js :

        $.index.open();
        

      • app/views/index.xml :

        <Alloy>
            <Window>
        	<View id="main" class="horizontal oh-shit">
                    <View id="firstChild"></View>
                </View>
            </Window>
        </Alloy>
        

      • app/styles/index.tss :

        '.horizontal': {
            layout: 'horizontal'
        }
         
        '.oh-shit': {
            layout: null
        }
        

      • compile and run the app, it crashes at startup on android

      Reason: The TiView class constructor does not correctly check that the layout property is not null, and it crashes on line 25 when calling equals().

      Expected behavior: The app should not crash and the view should have the default layout (LayoutArrangement.DEFAULT)

        Attachments

          Activity

            People

            • Assignee:
              msamah Ashraf Abu (Inactive)
              Reporter:
              xavier Xavier Lacot
              Reviewer:
              Ashraf Abu (Inactive)
            • Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Backbone Issue Sync

                • Titanium SDK/CLI <> Titanium Mobile
                  Synced with:
                  TIMOB-20748
                  Sync status:
                  ERROR
                  Last received:
                  Last sent:

                  Git Source Code