Below is the android app firebase crash stack trace and I'm unable identify the cause of that crash. This might be a stupid question but this crash count is spiking and I need a fix. What exactly is this == null means?
Fatal Exception: java.lang.NullPointerException: this == null at com.pure.indosat.care.fragments.buy.BuyPackagesFragment.lambda$parsePackagesCategories$1(BuyPackagesFragment.java:175) at com.pure.indosat.care.fragments.buy.BuyPackagesFragment.lambda$parsePackagesCategories$1$BuyPackagesFragment(BuyPackagesFragment.java:11) at com.pure.indosat.care.fragments.buy.-$$Lambda$BuyPackagesFragment$CcYVviVqJQdnZlEmW30Nw6EKMQA.run(-.java:11) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7948) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
I am not getting any crashes in the BuyPackagesFragment java class when I tested it. Below code is the one at line no. 175 as per crash
private void parsePackagesCategories(JSONObject jsonObject) {
Handler handler = new Handler();
handler.post(() -> {
Iterator<String> keys = jsonObject.keys();
tabs.clear();
while (keys.hasNext()) {
String key = keys.next();
if (jsonObject.opt(key) instanceof JSONObject) {
JSONObject jsonObject1 = (JSONObject) jsonObject.opt(key);
if (jsonObject1 != null) {
String title = jsonObject1.optString("title");
JSONArray jsonArray = jsonObject1.optJSONArray("categories");
TabInfo item = new TabInfo();
**Line No: 175 : JSONArray categoriesArray = mActivity.getJSONArray(jsonObject1, "categories");**
try {
String id = categoriesArray.length() > 0
? categoriesArray.getJSONObject(0).optString("category_id")
: "";
item.setId(id);
} catch (JSONException e) {
TraceUtils.logException(e);
}
item.setTitle(title);
item.setData(jsonArray);
item.setOrder(jsonObject1.optInt("order"));
tabs.add(item);
}
}
}
Collections.sort(tabs, (z1, z2) -> {
if (z1.getOrder() > z2.getOrder())
return 1;
else if (z1.getOrder() < z2.getOrder())
return -1;
return 0;
});
parseTabsData();
});
}
Here I thought "mActivity" might be null but if that's the case then the crash should happen at the beginning itself as per the code.
If someone can tell me what exactly this this == null means then it would be helpful.
Thank you.
public JSONArray getJSONArray(JSONObject jsonObject, String key) {
JSONArray jsonArray = new JSONArray();
if (jsonObject == null || TextUtils.isEmpty(key)) return jsonArray;
try {
if (jsonObject.opt(key) instanceof JSONObject) {
jsonArray.put(jsonObject.optJSONObject(key));
return jsonArray;
}
if (jsonObject.opt(key) instanceof JSONArray) {
jsonArray = jsonObject.optJSONArray(key);
return jsonArray;
}
} catch (Exception e) {
TraceUtils.logException(e);
}
return jsonArray;
}