2017-10-11 5 views
0

J'essaie de créer une page de connexion et de me connecter à la base de données SQLite en utilisant la classe SQLiteOpenHelper. Mais le code par défaut dans SQLiteOpenHelper.java montre une erreur à la ligne db.reopenReadWrite(); J'ai vérifié que le fichier SQLiteDatabase.java a la méthode reopenReadWrite(); peut u me aider à résoudre ce problèmeImpossible de résoudre la méthode 'reopenReadWrite()'

+1

Pls. partagez votre code. –

Répondre

1

Cette méthode est cachée avec le @hide javadoc attribute comme vous pouvez le voir dans the source code:

/** 
* Reopens the database in read-write mode. 
* If the database is already read-write, does nothing. 
* 
* @throws SQLiteException if the database could not be reopened as requested, in which 
* case it remains open in read only mode. 
* @throws IllegalStateException if the database is not open. 
* 
* @see #isReadOnly() 
* @hide 
*/ 
public void reopenReadWrite() { 
    synchronized (mLock) { 
     throwIfNotOpenLocked(); 

     if (!isReadOnlyLocked()) { 
      return; // nothing to do 
     } 

     // Reopen the database in read-write mode. 
     final int oldOpenFlags = mConfigurationLocked.openFlags; 
     mConfigurationLocked.openFlags = (mConfigurationLocked.openFlags & ~OPEN_READ_MASK) 
       | OPEN_READWRITE; 
     try { 
      mConnectionPoolLocked.reconfigure(mConfigurationLocked); 
     } catch (RuntimeException ex) { 
      mConfigurationLocked.openFlags = oldOpenFlags; 
      throw ex; 
     } 
    } 
} 

Comme il ne fait pas partie de l'API publique, vous ne pouvez pas utiliser cette méthode sans en utilisant la réflexion.

Le meilleur chemin serait d'utiliser simplement les méthodes qui sont dans l'API publique, listed in the SQLiteDatabase documentation.

Tout ce que vous avez besoin est la méthode SQLiteOpenHelper#getReadableDatabase(), qui appelle à son tour getDatabaseLocked(), qui appelle en interne db.reopenReadWrite():

public SQLiteDatabase getReadableDatabase() { 
    synchronized (this) { 
     return getDatabaseLocked(false); 
    } 
} 

private SQLiteDatabase getDatabaseLocked(boolean writable) { 
    if (mDatabase != null) { 
     if (!mDatabase.isOpen()) { 
      // Darn! The user closed the database by calling mDatabase.close(). 
      mDatabase = null; 
     } else if (!writable || !mDatabase.isReadOnly()) { 
      // The database is already open for business. 
      return mDatabase; 
     } 
    } 

    if (mIsInitializing) { 
     throw new IllegalStateException("getDatabase called recursively"); 
    } 

    SQLiteDatabase db = mDatabase; 
    try { 
     mIsInitializing = true; 

     if (db != null) { 
      if (writable && db.isReadOnly()) { 
       db.reopenReadWrite(); 
      } 

     //....................... 
+0

Merci de m'avoir aidé !! –