Environment Info:
APK Version 1.1 (2).
AndroidOS Version = “6.0.1”,Mobile phone has enough memory.
Description information:
We find that mobile apps are prone to crashes due to a network issue, mainly because successful network API calls return unexpected or no data.
And we found that when this app's network returned data is null or some fields are null (JSON format), a random value or the network request fails (status code is 404/503), or is empty, the app has crashed.
crash information:
Crash One:
crashActivity=edu.stanford.rkpandey.covid19tracker.MainActivity
:
java.lang.OutOfMemoryError: Failed to allocate a 23174278 byte allocation with 16777216 free bytes and 18MB until OOM
at java.lang.StringFactory.newStringFromChars(Native Method)
at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:629)
at java.lang.StringBuilder.toString(StringBuilder.java:663)
at org.json.JSONStringer.toString(JSONStringer.java:430)
at org.json.JSONArray.toString(JSONArray.java:586)
at com.InstrumentClass.typeParser.JsonParser.parseAndFuzz(JsonParser.java:44)
at com.InstrumentClass.ResponseParseAndReplace.parseInputStreamAndAddNode(ResponseParseAndReplace.java:714)
at com.InstrumentClass.ResponseParseAndReplace.parseAndReplace(ResponseParseAndReplace.java:439)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:172)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Crash Two:
crashActivity=edu.stanford.rkpandey.covid19tracker.MainActivity
:
java.util.NoSuchElementException: List is empty.
at kotlin.collections.CollectionsKt___CollectionsKt.last(_Collections.kt:372)
at edu.stanford.rkpandey.covid19tracker.MainActivity.updateDisplayMetric(MainActivity.kt:157)
at edu.stanford.rkpandey.covid19tracker.MainActivity.access$updateDisplayMetric(MainActivity.kt:21)
at edu.stanford.rkpandey.covid19tracker.MainActivity$setupEventListeners$3.onCheckedChanged(MainActivity.kt:135)
at android.widget.RadioGroup.setCheckedId(RadioGroup.java:173)
at android.widget.RadioGroup.-wrap0(RadioGroup.java)
at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:351)
at android.widget.CompoundButton.setChecked(CompoundButton.java:159)
at edu.stanford.rkpandey.covid19tracker.MainActivity.updateDisplayWithData(MainActivity.kt:166)
at edu.stanford.rkpandey.covid19tracker.MainActivity.access$updateDisplayWithData(MainActivity.kt:21)
at edu.stanford.rkpandey.covid19tracker.MainActivity$onCreate$1.onResponse(MainActivity.kt:62)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run(lambda)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Crash Three:
crashActivity=edu.stanford.rkpandey.covid19tracker.MainActivity
:
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.Date.getTime()' on a null object reference
at java.util.Calendar.setTime(Calendar.java:1197)
at java.text.SimpleDateFormat.formatImpl(SimpleDateFormat.java:527)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:829)
at java.text.DateFormat.format(DateFormat.java:314)
at edu.stanford.rkpandey.covid19tracker.MainActivity.updateInfoForDate(MainActivity.kt:179)
at edu.stanford.rkpandey.covid19tracker.MainActivity.updateDisplayMetric(MainActivity.kt:157)
at edu.stanford.rkpandey.covid19tracker.MainActivity.access$updateDisplayMetric(MainActivity.kt:21)
at edu.stanford.rkpandey.covid19tracker.MainActivity$setupEventListeners$3.onCheckedChanged(MainActivity.kt:135)
at android.widget.RadioGroup.setCheckedId(RadioGroup.java:173)
at android.widget.RadioGroup.-wrap0(RadioGroup.java)
at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:351)
at android.widget.CompoundButton.setChecked(CompoundButton.java:159)
at edu.stanford.rkpandey.covid19tracker.MainActivity.updateDisplayWithData(MainActivity.kt:166)
at edu.stanford.rkpandey.covid19tracker.MainActivity.access$updateDisplayWithData(MainActivity.kt:21)
at edu.stanford.rkpandey.covid19tracker.MainActivity$onCreate$1.onResponse(MainActivity.kt:62)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run(lambda)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Finally:
The cause of the program crash may be that the network response data is not handled properly in the code, such as null.
Although this kind of collapse is relatively rare, it is also worthy of attention.
If you have confirmed or fixed this problem, please give me a reply, thank you!