Попытайтесь повторно открыть уже закрытый объект: SQLiteDatabase в android - PullRequest
0 голосов
/ 23 марта 2020

Я нашел Cra sh на Fabri c, который пытается повторно открыть уже закрытый объект: SQLiteDatabase. Я пытаюсь выяснить значение, но соединение с базой данных закрыто до получения значений.

Мой код:

 @Override
    public synchronized void getAllCurrencies(final GetCurrenciesCallback callback) {
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                List<Forex> currencies = new ArrayList<>();
                SQLiteDatabase db = mDbHelper.getReadableDatabase();

                    Cursor c = db.query(
                            RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.TABLE_NAME, null, null, null, null, null, null);
                    Forex currency;
                    try {
                        if (c != null && c.getCount() > 0) {
                            while (c.moveToNext()) {
                                String id = c.getString(c.getColumnIndexOrThrow(RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.COLUMN_NAME_ENTRY_ID));
                                String name = c.getString(c.getColumnIndexOrThrow(RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.COLUMN_NAME_CURRENCY_NAME));
                                String rate = c.getString(c.getColumnIndexOrThrow(RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.COLUMN_NAME_CURRENCY_RATE));
                                String symbol = c.getString(c.getColumnIndexOrThrow(RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.COLUMN_NAME_CURRENCY_SYMBOL));
                                String zeroDecimals = c.getString(c.getColumnIndexOrThrow(RecentlyUsedCurrencyPersistenceContract.CurrencyEntry.COLUMN_NAME_ZERO_DECIMALS));
                                currency = new Forex();
                                currency.setLabel(name);
                                currency.setTo(id);
                                currency.setRate(rate);
                                currency.setRecent(true);
                                currency.setSymbol(symbol);
                                currency.setZero_decimals(Boolean.valueOf(zeroDecimals));
                                currencies.add(currency);
                            }
                        }
                        if (c != null) {
                            c.close();
                        }

                        if (currencies.size() > 0) {
                            callback.onCurrenciesLoaded(currencies);
                        } else {
                            callback.onDataNotAvailable();
                        }
                    } catch (IllegalStateException e) {
                        callback.onDataNotAvailable();
                    }

                Logr.i("Recent Currencies list compares " + currencies.toString() + " Items");
            }
        });
    }

Я пытался это сделать, но, насколько я понимаю, где этот вопрос.

...