oppia-android
oppia-android copied to clipboard
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.
Adding a check in StateRetriver
for this rule type will fix the issue
private fun createExactInputForFractionInput(
inputJson: JSONObject,
keyName: String,
ruleType: String
): InteractionObject {
return when (ruleType) {
"HasNumeratorEqualTo" ->
InteractionObject.newBuilder()
.setSignedInt(inputJson.getInt(keyName))
.build()
"HasDenominatorEqualTo" ->
InteractionObject.newBuilder()
.setNonNegativeInt(inputJson.getInt(keyName))
.build()
+ "HasIntegerPartEqualTo" ->
+ InteractionObject.newBuilder()
+ .setSignedInt(inputJson.getInt(keyName))
+ .build()
else ->
InteractionObject.newBuilder()
.setFraction(parseFraction(inputJson.getJSONObject(keyName)))
.build()
}
}
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.
Interested!
@adizcode Assigned.
@anandwana001 @ayush0402
I'm unable to find any Chapter 6 within the app. There's only 4 topics and none of them have the mentioned chapter. What am I missing?
@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.
@anandwana001 hey can you elaborate more on Steps to reproduce the behaviour issue because I couldn't find where this error is ??
Did you follow the given steps? Which step you are stuck on?
@anandwana001 I found the file where we have to make the changes but I couldn't find any option to open chapter 6 to get the error can you tell me the steps to get this error!!
No, As I mentioned, chapter 6 is a part of alpha data that is not available publically, that's why we need to fix this issue using the currently available data only.
Check 5th Step, you have to use the First Test Topic
exploration which you get when you open the application on the home screen.
Please assign this issue to me .
Could you please assign this to me ?
Please make sure to fill the CLA before you start contributing @AbhaySota
I have filled the CLA form @JishnuGoyal .
Assigning you this issue @AbhaySota
Hey @JishnuGoyal @ayush0402 I saw the PR of this issue was marked stale, If its alright can I work on this issue?
@BenHenning, I see the above PR is marked stale. I would like to work on this issue. Hence, could this issue be assigned to me?