Как узнать, из какого действия ошибка исходит из моего приложения в рабочей среде?

#java #android #sqlite

#java #Android #sqlite

Вопрос:

Мое приложение находится в рабочей среде 2 месяца, и я проверял раздел, в котором показан сбой play console, и я смог решить некоторые проблемы, но есть некоторые, в которых я точно не знаю, из-за какой активности они происходят, ошибка mi java.lang.IllegalStateException , и когда я нажимаю подробнее:

     java.lang.IllegalStateException: 
  at androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:115)
  at androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:91)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:919)
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: 
  at android.database.sqlite.SQLiteConnection.nativeOpen (Native Method)
  at android.database.sqlite.SQLiteConnection.open (SQLiteConnection.java:300)
  at android.database.sqlite.SQLiteConnection.open (SQLiteConnection.java:218)
  at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked (SQLiteConnectionPool.java:737)
  at android.database.sqlite.SQLiteConnectionPool.open (SQLiteConnectionPool.java:284)
  at android.database.sqlite.SQLiteConnectionPool.open (SQLiteConnectionPool.java:251)
  at android.database.sqlite.SQLiteDatabase.openInner (SQLiteDatabase.java:1386)
  at android.database.sqlite.SQLiteDatabase.open (SQLiteDatabase.java:1331)
  at android.database.sqlite.SQLiteDatabase.openDatabase (SQLiteDatabase.java:967)
  at android.database.sqlite.SQLiteDatabase.openDatabase (SQLiteDatabase.java:955)
  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:448)
  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:391)
  at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase (FrameworkSQLiteOpenHelper.java:145)
  at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase (FrameworkSQLiteOpenHelper.java:106)
  at androidx.room.RoomDatabase.beginTransaction (RoomDatabase.java:352)
  at androidx.work.impl.utils.ForceStopRunnable.cleanUp (ForceStopRunnable.java:156)
  at androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:87)
 

Из 750 пользователей, которые установили мое приложение, это произошло с одним 5 раз, следует ли расследовать ошибку, которая произошла с одним пользователем (из 750) или нет? И, самое главное, как я могу точно узнать, откуда возникла ошибка?

Комментарии:

1. При создании исключения укажите пользователя, к которому в данный момент осуществляется доступ, чтобы вы могли отследить его. Поместите в исключение как можно больше информации, которая поможет вам выяснить, какой элемент может быть его причиной.

2. Я не специалист по перехвату исключений, «укажите пользователя, к которому в данный момент осуществляется доступ, чтобы вы могли его отследить», как я могу это сделать?

Ответ №1:

При создании исключения укажите пользователя, к которому в данный момент осуществляется доступ, чтобы вы могли отследить его. Поместите в исключение как можно больше информации, которая поможет вам выяснить, какой элемент может быть его причиной.

https://stackify.com/best-practices-exceptions-java/

Вот несколько хороших примеров, а также рекомендации, которым следует следовать. В упомянутых сообщениях добавьте идентификатор пользователя или что-то, что поможет вам определить, что происходит. Научитесь создавать пользовательские исключения и перехватывать наиболее конкретные исключения, которые вы можете. Не просто перехватывайте исключение, лучше уточнить, какое исключение вы улавливаете, а не создавать широкую сеть.

Комментарии:

1. ни в коем случае трассировка не содержит ничего за пределами системных библиотек. Как можно было бы поместить что-либо в исключение, сгенерированное без ваших вызовов в стеке?

2. Хотя исключение генерируется только вызовами API, которые вам не принадлежат, вы используете стороннюю библиотеку. Возможно, вам захочется вводить некоторые инструкции журнала всякий раз, когда вы используете вызовы sqlight. Система сообщает вам, что не может открыть базу данных. Я бы начал с размещения операторов ведения журнала повсюду, где вызывается база данных, и поиска исключения, которое ее выполняет.