https://kotlinlang.org logo
#compose
Title
# compose
g

Guy Bieber

04/29/2020, 5:56 PM
Two questions: 1. I am trying to setup some data structures that point to my @Model data in onCreate. This gets an exception:
Copy code
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nikolamotor.nikolamotor/com.nikolamotor.nikolamotor.MainActivity}: java.lang.IllegalStateException: Not in a frame
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IllegalStateException: Not in a frame
        at androidx.compose.frames.FramesKt.currentFrame(Frames.kt:180)
        at androidx.compose.frames.FramesKt.readable(Frames.kt:448)
        at androidx.compose.frames.FramesKt._readable(Frames.kt:461)
        at com.nikolamotor.nikolamotor.DataModel.getTemperature(Unknown Source:5)
        at com.nikolamotor.nikolamotor.MainActivity.onCreate(MainActivity.kt:95)
        at android.app.Activity.performCreate(Activity.java:7825)
        at android.app.Activity.performCreate(Activity.java:7814)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Here is the data model:
Copy code
@Model
data class DataModel (
    var username : String = "dude",
    var password : String = "blah",
    var oldPage : Pages = Pages.SPLASH_PAGE,
    var newPage : Pages = Pages.SPLASH_PAGE,
    var temperature : Int = 72
)

var dataModel = DataModel()
Here is the onCreate code:
Copy code
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // NOTE many items can't be constructed until onCreate is called
        ui = UiStyled(this)
        pg = PageControl(this)
        homePageControls  = arrayOf(
            //Row 1
            BasicControl(
                icon = imageFromResource(resources, R.drawable.fan_lvl_0),
                name = resources.getString(R.string.home_auto)
            ),
            VertTempControl(
                temp = dataModel.temperature,
                step = 1
            ),
l

Leland Richardson [G]

04/29/2020, 6:06 PM
basically, the temporary answer here is to call
FrameManager.ensureStarted()
before using
dataModel
🙂 2
the long term answer is to wait for us to implement the “global transaction” https://issuetracker.google.com/146054789
where this will no longer be an issue
g

Guy Bieber

04/29/2020, 6:07 PM
Nice!!