oppia-android: Fraction type JSONObject Parsing Error
Describe the bug
Fraction’s rule type HasIntegerPartEqualTo
is not parsing correctly.
To Reproduce Steps to reproduce the behavior:
- Go to Chapter 6 - Mixed Numbers and the Number line (Alpha Data only)
- Nothing will show on screen
Expected behavior The data should be parsed correctly.
Demonstration
Environment
- Device/emulator being used: emulator
- Android or SDK version (e.g. Android 5 or SDK 21): SDK 28
- App version (you can get this through system app settings or via the admin controls menu in-app): 1 with data from the assets repository
Additional context Error Log
/org.oppia.android E/StateFragment: Failed to retrieve ephemeral state
org.json.JSONException: Value 0 at x of type java.lang.Integer cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:101)
at org.json.JSONObject.getJSONObject(JSONObject.java:616)
at org.oppia.android.domain.util.StateRetriever.createExactInputForFractionInput(StateRetriever.kt:330)
at org.oppia.android.domain.util.StateRetriever.createExactInputFromJson(StateRetriever.kt:301)
at org.oppia.android.domain.util.StateRetriever.convertToRuleSpec(StateRetriever.kt:263)
at org.oppia.android.domain.util.StateRetriever.createSingleAnswerGroupFromJson(StateRetriever.kt:126)
at org.oppia.android.domain.util.StateRetriever.createAnswerGroupsFromJson(StateRetriever.kt:94)
at org.oppia.android.domain.util.StateRetriever.createInteractionFromJson(StateRetriever.kt:67)
at org.oppia.android.domain.util.StateRetriever.createStateFromJson(StateRetriever.kt:49)
at org.oppia.android.domain.exploration.ExplorationRetriever.createStatesFromJsonObject(ExplorationRetriever.kt:58)
at org.oppia.android.domain.exploration.ExplorationRetriever.loadExplorationFromAsset(ExplorationRetriever.kt:46)
at org.oppia.android.domain.exploration.ExplorationRetriever.loadExploration(ExplorationRetriever.kt:33)
at org.oppia.android.domain.exploration.ExplorationProgressController.retrieveCurrentStateWithinCacheAsync(ExplorationProgressController.kt:463)
at org.oppia.android.domain.exploration.ExplorationProgressController.retrieveCurrentStateAsync(ExplorationProgressController.kt:446)
at org.oppia.android.domain.exploration.ExplorationProgressController$getCurrentState$1.invokeSuspend(ExplorationProgressController.kt:438)
at org.oppia.android.domain.exploration.ExplorationProgressController$getCurrentState$1.invoke(Unknown Source:10)
at org.oppia.android.util.data.AsyncResult$transformAsync$2.invokeSuspend(AsyncResult.kt:90)
at org.oppia.android.util.data.AsyncResult$transformAsync$2.invoke(Unknown Source:10)
at org.oppia.android.util.data.AsyncResult.transformWithResultAsync(AsyncResult.kt:147)
at org.oppia.android.util.data.AsyncResult.transformAsync(AsyncResult.kt:89)
at org.oppia.android.util.data.DataProviders$Companion$transformAsync$1.retrieveData(DataProviders.kt:73)
at org.oppia.android.util.data.DataProviders$NotifiableAsyncLiveData.retrieveFromDataProvider(DataProviders.kt:364)
at org.oppia.android.util.data.DataProviders$NotifiableAsyncLiveData.handleDataProviderUpdate(DataProviders.kt:352)
at org.oppia.android.util.data.DataProviders$NotifiableAsyncLiveData$onActive$job$1.invokeSuspend(DataProviders.kt:311)
Data
"rule_specs": [{
"rule_type": "HasIntegerPartEqualTo",
"inputs": {
"x": 0
}
}, {
"rule_type": "HasIntegerPartEqualTo",
"inputs": {
"x": 1
}
}, {
"rule_type": "HasIntegerPartEqualTo",
"inputs": {
"x": 2
}
}],
To Fix
- Open file
oppia-android/domain/src/main/assets/test_exp_id_2.json
- Go to line 407 - https://github.com/oppia/oppia-android/blob/88f25ec53337dadbbf5c73db537257cc8c7484a6/domain/src/main/assets/test_exp_id_2.json#L407
- Add 1 more rule type
{
"rule_type": "HasIntegerPartEqualTo",
"inputs": {
"x": 1
}
}
it will look like this after adding
"rule_specs": [{
"rule_type": "IsExactlyEqualTo",
"inputs": {
"f": {
"isNegative": false,
"wholeNumber": 0,
"numerator": 1,
"denominator": 2
}
}
},
{
"rule_type": "HasIntegerPartEqualTo",
"inputs": {
"x": 1
}
}],
- Uninstall the already installed oppia app if there is any on your testing device
- Install app and open First Test Topic
- Nothing will be shown on screen and error will occur on logcat.
- Now, add the logic to parse new rule - https://github.com/oppia/oppia-android/issues/4202#issuecomment-1042790267
- re-install the app and open First Test Topic, it will work fine now.
About this issue
- Original URL
- State: open
- Created 2 years ago
- Comments: 17 (10 by maintainers)
@adizcode Chapter 6 mentioned in the issue is a part of the alpha production app so the data can’t be shared. I had added the steps in PR description.
This seems reasonable to add, though FWIW this won’t affect alpha since we don’t use the JSON loader for those lessons.
De-assigning and marking as a good first issue for someone to pick up.