oppia-android icon indicating copy to clipboard operation
oppia-android copied to clipboard

Fraction type JSONObject Parsing Error

Open anandwana001 opened this issue 3 years ago • 11 comments

Describe the bug Fraction's rule type HasIntegerPartEqualTo is not parsing correctly.

To Reproduce Steps to reproduce the behavior:

  1. Go to Chapter 6 - Mixed Numbers and the Number line (Alpha Data only)
  2. 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

  1. Open file oppia-android/domain/src/main/assets/test_exp_id_2.json
  2. Go to line 407 - https://github.com/oppia/oppia-android/blob/88f25ec53337dadbbf5c73db537257cc8c7484a6/domain/src/main/assets/test_exp_id_2.json#L407
  3. 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
                }
              }],
  1. Uninstall the already installed oppia app if there is any on your testing device
  2. Install app and open First Test Topic
  3. Nothing will be shown on screen and error will occur on logcat.
  4. Now, add the logic to parse new rule - https://github.com/oppia/oppia-android/issues/4202#issuecomment-1042790267
  5. re-install the app and open First Test Topic, it will work fine now.

anandwana001 avatar Feb 17 '22 10:02 anandwana001

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()
    }
  }

anandwana001 avatar Feb 17 '22 10:02 anandwana001

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.

BenHenning avatar Feb 18 '22 02:02 BenHenning

Interested!

adizcode avatar Feb 22 '22 00:02 adizcode

@adizcode Assigned.

ayush0402 avatar Feb 26 '22 20:02 ayush0402

@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 avatar Mar 02 '22 20:03 adizcode

@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 avatar Mar 08 '22 05:03 anandwana001

@anandwana001 hey can you elaborate more on Steps to reproduce the behaviour issue because I couldn't find where this error is ??

visheshkadian avatar Mar 08 '22 12:03 visheshkadian

Did you follow the given steps? Which step you are stuck on?

anandwana001 avatar Mar 08 '22 12:03 anandwana001

@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!!

visheshkadian avatar Mar 08 '22 14:03 visheshkadian

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.

anandwana001 avatar Mar 08 '22 14:03 anandwana001

Please assign this issue to me .

AjayMaheshwari23 avatar Aug 11 '22 08:08 AjayMaheshwari23

Could you please assign this to me ?

AbhaySota avatar Nov 02 '22 18:11 AbhaySota

Please make sure to fill the CLA before you start contributing @AbhaySota

JishnuGoyal avatar Nov 02 '22 18:11 JishnuGoyal

I have filled the CLA form @JishnuGoyal .

AbhaySota avatar Nov 02 '22 18:11 AbhaySota

Assigning you this issue @AbhaySota

JishnuGoyal avatar Nov 02 '22 18:11 JishnuGoyal

Hey @JishnuGoyal @ayush0402 I saw the PR of this issue was marked stale, If its alright can I work on this issue?

pratik9315 avatar Dec 12 '22 08:12 pratik9315

@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?

Gunashree-R-V avatar Feb 25 '23 16:02 Gunashree-R-V