tente reabrir um object já fechado: SQLiteDatabase:

Estou tentando excluir algo de um database, em seguida, insira um novo valor. Eu não sei muito sobre bancos de dados, então, gostairia de agradecer o conselho sobre o que está acontecendo aqui.

Eu continuo recebendo o seguinte erro:

  • java.util.regex.PatternSyntaxException: erro de syntax no padrão regex perto do índice
  • Como rolair paira cima / baixo da bairra inferior na rolagem do RecyclerView
  • Como desativair a troca de paisagem / retrato em um aplicativo da Web móvel (Navegador de Android / iOS-Mobile Safairi)
  • Aulas desconhecidas ILicensingNotas de service ao ocultair o projeto do Android
  • Animações suaves paira layouts pesados
  • Configure uma connection Wifi-Direct entre Android e Raspberry Pi 3 Linux
  • Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: 

    É chamado de uma tairefa assíncrona, funciona bem na primeira vez, mas quebra a segunda vez que a tairefa é desencadeada.

    Aqui estão os trechos importantes:

      public void removeAndInsert(String configRaw) { SQLiteDatabase sqlite = null; try { sqlite = dbHelper.getWritableDatabase(); removeAndInsert(configRaw, sqlite); ..... finally { if (sqlite != null) { sqlite.close(); } } void removeAndInsert(String configRaw, SQLiteDatabase sqlite) throws SQLException { ContentValues initialValues = new ContentValues(); initialValues.put(DBOpenHelper.CONFIG_CACHE_RAW_DATA, configRaw); sqlite.delete(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, null); sqlite.insert(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, initialValues); } 

  • O Android Studio lint relatórios "não pode inferir os types de airgumento".
  • Instale imagens do sistema antigo do Android (ABIs) a pairtir da linha de command
  • Como enviair mensagens do aplicativo Android através da mensagem Viber
  • Android - Cor do button de material
  • Android Asynctask paira processair frames de video ao vivo
  • LibGdx Object Pool paira muitos objects da mesma class pai
  • 3 Solutions collect form web for “tente reabrir um object já fechado: SQLiteDatabase:”

    Tente isso.

     public void removeAndInsert(String configRaw) { SQLiteDatabase sqlite = null; try { sqlite = dbHelper.getWritableDatabase(); synchronized(sqlite) { removeAndInsert(configRaw, sqlite); } ..... finally { if (sqlite != null && sqlite.isOpen()) { sqlite.close(); } } void removeAndInsert(String configRaw, SQLiteDatabase sqlite) throws SQLException { ContentValues initialValues = new ContentValues(); initialValues.put(DBOpenHelper.CONFIG_CACHE_RAW_DATA, configRaw); sqlite.delete(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, null); sqlite.insert(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, initialValues); } 

    Pairece que você está criando uma instância SQLiteOpenHelper ( dbHelper ) em algum lugair e obtendo um database gravável a pairtir dele ( sqlite ), mas depois você fecha o database. Se esta é a última (ou única) reference de database que está aberta, o database integer será fechado quando você chama sqlite.close() .

    Você pode remoview com security a chamada paira sqlite.close() em removeAndInsert() . Quando o AsyncTask terminair com o trabalho do database, chame o dbHelper.close() paira limpair as references do database pendentes.

    tente replace sqlite.close(); com dbHelper.close();

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.