Неустранимое исключение: java .lang.IllegalStateException: попытка повторно открыть уже закрытый объект: SQLiteDatabase: - PullRequest
0 голосов
/ 15 апреля 2020

Я получаю это, только если пользователь установит это приложение из магазина игр, в противном случае эта проблема не появится. Даже если мы установим приложение из 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);
}
...