I am getting this only if user installs this app from play store, otherwise this issue doesn't appears. Even if we install app from apk file, and after seeing this issue clearing app data and cache removes this issue. My app is live on play store, I have to fix this as soon as possible.
this is my log
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)
and this issue happens on places where I do any functionality related to database.
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);
}
this line of code creates this exception,
database.tagDao().insertTags(tags);
Insert:
@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);
}
Update room_library version, in Database class solved the issue.. !!