Я пытаюсь отследить источник ошибки, основанный на отчете о сбое, представленном пользователем, и пришел к выводу, что мне нужно некоторое базовое обучение тому, как интерпретировать отчет о сбое.Как читать отчеты о сбоях из консоли разработчика
В качестве примера, отчет аварии выглядит следующим образом:
java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at java.lang.Integer.valueOf(Integer.java:525)
at com.cloud3squared.meteogram.MeteogramService.cacheFileName(MeteogramService.java)
cacheBaseName(MeteogramService.java)
getAppWidgetId(MeteogramService.java)
createAdhocWidgetUpdateIntent(MeteogramService.java)
setupBasicClickStuff(MeteogramService.java)
setAdhocAppWidgetAlarm(MeteogramService.java)
setNextClockWidgetUpdateAlarm(MeteogramService.java)
cancelAppWidgetAlarm(MeteogramService.java)
cancelAppWidgetAlarms(MeteogramService.java)
logAction$3aaf2084(MeteogramService.java)
logActionAgainstAllWidgets$62dc3a79(MeteogramService.java)
updateAppWidget(MeteogramService.java)
showButtons(MeteogramService.java)
hideButtons(MeteogramService.java)
fetchOk(MeteogramService.java)
getViewId(MeteogramService.java)
putBitmapIntoWidget(MeteogramService.java)
lngNow(MeteogramService.java)
showNotification(MeteogramService.java)
showMessageInWidget(MeteogramService.java)
sharpen(MeteogramService.java)
removeFromRequestsList(MeteogramService.java)
removeFromRequestsList$204347ff(MeteogramService.java)
MeteogramService.java)
displayStuffInWidget(MeteogramService.java)
access$000(MeteogramService.java)
access$100(MeteogramService.java)
access$300(MeteogramService.java)
at com.cloud3squared.meteogram.MeteogramService$GetServerWidgetAsyncTask.onPostExecute(MeteogramService.java)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Это показывает порядок вызовов, ведущих к NumberFormatException
, и если да, то в каком порядке? Я читаю строки at
снизу вверх? Что такое access
вложенный внутри MeteogramService
? ... нет access
способ в этом классе. Как определить, в какой функции на самом деле происходит NumberFormatException
? Логически я бы сказал, что внутри cacheFileName
, но там ничего нет, что может привести к такому исключению ... разбор String
до int
происходит до этого ... разобранный int просто передается в cacheFileName
.
Любая помощь с благодарностью получена.
EDIT
Другие фрагменты кода для ссылки в комментариях ниже:
static String cacheFileName(Context context, int appWidgetId, int pxWidth, int pxHeight) {
String fileName = cacheBaseName(appWidgetId) + "_" + pxWidth + "x" + pxHeight + ".png";
logAction(context, appWidgetId, "cacheFileName " + fileName, TAG);
return fileName;
}
static String cacheBaseName(int appWidgetId) {
return (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) ? "widget_" : "widget_" + appWidgetId;
}
Да, стек исключений показывает порядок вызовов. Исключение составляет только верхняя часть (invalidInt).Я не слишком уверен в всех именах методов, перечисленных после cacheFileName, возможно, эксперт по Java может комментировать. Метод с нетерпением ждет того, который вызывается onPostExecute. Чтобы отлаживать, я бы просто вообще осмотрел MeteograomService.java для вызовов valueOf (String). Надеюсь, их не так уж много. Обязательно попробуйте/поймайте каждый –
, он имеет отношение к вашему виджету, когда он обновлялся в вашем сервисе messagegram. – Elltz
Используете ли вы ProGuard? – Zoe