Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug In QuestionnaireFragment.setQuestionnaireLaunchContextMap() api #2772

Open
rmayore opened this issue Jan 21, 2025 · 2 comments
Open

Bug In QuestionnaireFragment.setQuestionnaireLaunchContextMap() api #2772

rmayore opened this issue Jan 21, 2025 · 2 comments

Comments

@rmayore
Copy link

rmayore commented Jan 21, 2025

Describe the bug
Exception thrown by QuestionnaireFragment.setQuestionnaireLaunchContextMap() api. That or there's something crucial I'm missing on how to use it.

Exception: In comment below

Component
SDC App

To Reproduce
Steps to reproduce the behavior:

// Initialize Resource
    val patient = Patient()
    patient.addName().setFamily("Simpson").addGiven("James")

// Convert patient to Map<String, String>
    val ctx = FhirContext.forR4()
    val parser = ctx.newJsonParser()
    val launchContextMap = mapOf("patient" to parser.encodeResourceToString(patient))

//pass to questionnaire fragment
val questionnaireFragment =
      QuestionnaireFragment
        .builder()
        .setQuestionnaireLaunchContextMap(launchContextMap)
        .setQuestionnaire(questionnaireJsonString!!)
        .build()

//add the QuestionnaireFragment to the FragmentContainerView
    if (savedInstanceState == null) {
      supportFragmentManager.commit {
        setReorderingAllowed(true)
        add(R.id.fragment_container_view, questionnaireFragment)
      }
    }

Expected behavior

  • Questionnaire renders (even with the launch context still not utilized in the Questionnaire)

Screenshots
If applicable, add screenshots to help explain your problem.

Smartphone (please complete the following information):

  • Device: Samsung
  • Android version: Android 14
  • Build number: [e.g. Settings -> About phone -> Build number]
  • Version: 34

Additional context
Add any other context about the problem here.

Would you like to work on the issue?
Please state if this issue should be assigned to you or who you think could help to solve this issue.

@rmayore rmayore changed the title Bug In by QuestionnaireFragment.setQuestionnaireLaunchContextMap() api Bug In `QuestionnaireFragment.setQuestionnaireLaunchContextMap() api Jan 21, 2025
@rmayore
Copy link
Author

rmayore commented Jan 21, 2025

FATAL EXCEPTION: main
Process: com.google.android.fhir.codelabs.datacapture, PID: 3253
java.lang.RuntimeException: An exception happened in constructor of class com.google.android.fhir.datacapture.QuestionnaireViewModel
at androidx.lifecycle.SavedStateViewModelFactoryKt.newInstance(SavedStateViewModelFactory.kt:232)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:131)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
at com.google.android.fhir.datacapture.QuestionnaireFragment.getViewModel(QuestionnaireFragment.kt:52)
at com.google.android.fhir.datacapture.QuestionnaireFragment.onViewCreated(QuestionnaireFragment.kt:103)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3147)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4060)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: ca.uhn.fhir.parser.DataFormatException: HAPI-1861: Failed to parse JSON encoded FHIR content: Unexpected close marker ']': expected '}' (for root starting at [Source: UNKNOWN; line: 1])
at [Source: UNKNOWN; line: 58, column: 4]
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:124)
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:77)
at ca.uhn.fhir.parser.JsonParser.doParseResource(JsonParser.java:241)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:676)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:731)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:741)
at com.google.android.fhir.datacapture.QuestionnaireViewModel.<init>(QuestionnaireViewModel.kt:115)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.lifecycle.SavedStateViewModelFactoryKt.newInstance(SavedStateViewModelFactory.kt:226)
... 33 more
2025-01-21 12:43:38.013  3253-3253  AndroidRuntime          com...oid.fhir.codelabs.datacapture  E  Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '}' (for root starting at [Source: UNKNOWN; line: 1])
at [Source: UNKNOWN; line: 58, column: 4]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750)
at com.fasterxml.jackson.core.base.ParserBase._reportMismatchedEndMarker(ParserBase.java:1337)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._closeScope(ReaderBasedJsonParser.java:3054)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:713)
at com.fasterxml.jackson.databind.ObjectMapper._verifyNoTrailingTokens(ObjectMapper.java:4779)
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4722)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3065)
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:112)
... 42 moreFATAL EXCEPTION: main
Process: com.google.android.fhir.codelabs.datacapture, PID: 3253
java.lang.RuntimeException: An exception happened in constructor of class com.google.android.fhir.datacapture.QuestionnaireViewModel
at androidx.lifecycle.SavedStateViewModelFactoryKt.newInstance(SavedStateViewModelFactory.kt:232)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.kt:131)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
at com.google.android.fhir.datacapture.QuestionnaireFragment.getViewModel(QuestionnaireFragment.kt:52)
at com.google.android.fhir.datacapture.QuestionnaireFragment.onViewCreated(QuestionnaireFragment.kt:103)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3147)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4060)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: ca.uhn.fhir.parser.DataFormatException: HAPI-1861: Failed to parse JSON encoded FHIR content: Unexpected close marker ']': expected '}' (for root starting at [Source: UNKNOWN; line: 1])
at [Source: UNKNOWN; line: 58, column: 4]
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:124)
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:77)
at ca.uhn.fhir.parser.JsonParser.doParseResource(JsonParser.java:241)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:676)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:731)
at ca.uhn.fhir.parser.BaseParser.parseResource(BaseParser.java:741)
at com.google.android.fhir.datacapture.QuestionnaireViewModel.<init>(QuestionnaireViewModel.kt:115)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.lifecycle.SavedStateViewModelFactoryKt.newInstance(SavedStateViewModelFactory.kt:226)
... 33 more
2025-01-21 12:43:38.013  3253-3253  AndroidRuntime          com...oid.fhir.codelabs.datacapture  E  Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '}' (for root starting at [Source: UNKNOWN; line: 1])
at [Source: UNKNOWN; line: 58, column: 4]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750)
at com.fasterxml.jackson.core.base.ParserBase._reportMismatchedEndMarker(ParserBase.java:1337)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._closeScope(ReaderBasedJsonParser.java:3054)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:713)
at com.fasterxml.jackson.databind.ObjectMapper._verifyNoTrailingTokens(ObjectMapper.java:4779)
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4722)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3065)
at ca.uhn.fhir.parser.json.jackson.JacksonStructure.load(JacksonStructure.java:112)
... 42 more

@rmayore rmayore changed the title Bug In `QuestionnaireFragment.setQuestionnaireLaunchContextMap() api Bug In QuestionnaireFragment.setQuestionnaireLaunchContextMap() api Jan 21, 2025
@rmayore
Copy link
Author

rmayore commented Jan 22, 2025

Doesn't happen when passing a Person resource to the launch Context, happens only when passing a Patient resource.

This works

    // Initialize person
    val person = Person()
    person.addName().setFamily("Simpson").addGiven("James")

    // Convert person to Map<String, String>
    val ctx = FhirContext.forR4()
    val parser = ctx.newJsonParser()
    val launchContextMap = mapOf("person" to parser.encodeResourceToString(person)) as Map<String, String>

val questionnaireFragment =
      QuestionnaireFragment
        .builder()
        .setQuestionnaireLaunchContextMap(launchContextMap)
        .setQuestionnaire(questionnaireJsonString!!)
        .build()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant