Я получаю это, только если пользователь установит это приложение из магазина игр, в противном случае эта проблема не появится. Даже если мы установим приложение из apk-файла и, увидев эту проблему, очистим данные и кеш приложения, удалив эту проблему. Мое приложение доступно в магазине Play, я должен исправить это как можно скорее.
это мой журнал
Fatal Exception: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/coms.inception.walayem/databases/walayem
at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:57)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1955)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1934)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.java:161)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.java:150)
at androidx.room.RoomOpenHelper.hasRoomMasterTable(RoomOpenHelper.java:152)
at androidx.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.java:124)
at androidx.room.RoomOpenHelper.onOpen(RoomOpenHelper.java:116)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.java:151)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:504)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:391)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
at androidx.room.RoomDatabase.beginTransaction(RoomDatabase.java:257)
at coms.inception.walayem.database.TagDao_Impl.insertTags(TagDao_Impl.java:104)
at coms.inception.walayem.activities.user.UserMainActivity$25.onResponse(UserMainActivity.java:1240)
at coms.inception.walayem.activities.user.UserMainActivity$25.onResponse(UserMainActivity.java:1224)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
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:8016)
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:1076)
, и эта проблема возникает в местах, где я выполняю какие-либо функции, связанные с базой данных.
private void loadFilters() throws JSONException {
JSONArray fields = new JSONArray();
fields.put("name");
fields.put("id");
JSONArray domain = new JSONArray();
JSONObject payload = JSONRPCParams.createReadJsonObject(WalayemApi.TAG,
fields, domain, "id ASC");
System.out.println("Outgoing json-->" + payload);
WalayemRequest loadDetailsRequest = new WalayemRequest(
WalayemApi.SEARCH_READ(),
payload,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
tags.clear();
System.out.println("Menu: load filters-->" + response);
try {
JSONObject resultObject = response.getJSONObject("result");
JSONArray dataArray = resultObject.getJSONArray("records");
for (int i = 0; i < dataArray.length(); i++) {
JSONObject tagObject = dataArray.getJSONObject(i);
Tag tag = new Tag(tagObject);
tags.add(tag);
}
} catch (JSONException e) {
e.printStackTrace();
}
try{
database.tagDao().insertTags(tags);
}
catch (Exception e){
SnackBarrghh.showMessage(UserMainActivity.this, e.getMessage());
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("Error-->menu filters--> " + error);
}
}, new WalayemRequest.SessionExpireListener() {
@Override
public void onSessionExpired() {
// SessionExpiredDialog.show(UserMainActivity.this);
}
});
RestClient.getInstance(this).addToRequestQueue(loadDetailsRequest);
}
эта строка кода создает это исключение ,
database.tagDao().insertTags(tags);
Вставка:
@Dao
public interface TagDao {
@Query("SELECT * FROM tag")
List<Tag> getAll();
@Query("SELECT * FROM tag WHERE id IN (:tagIds)")
List<Tag> loadAllByIds(int[] tagIds);
@Insert
void insertAll(Tag... tags);
@Delete
void delete(Tag tag);
@Query("DELETE FROM tag")
void deleteAll();
@Query("SELECT * FROM tag WHERE id = (:id)")
Tag getTag(int id);
@Query("SELECT COUNT(*) FROM tag")
int getSize();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertTags(List<Tag> tags);
@Insert
void insert(Tag tag);
}