2017-10-11 5 views
0

Ich versuche eine Anmeldeseite zu erstellen und eine Verbindung zur SQLite-Datenbank mit der SQLiteOpenHelper-Klasse herzustellen. Aber der Standardcode in SQLiteOpenHelper.java zeigt einen Fehler in der Zeile db.reopenReadWrite(); Ich überprüfte, dass SQLiteDatabase.java die Methode reopenReadWrite() hat; Can u mir helfen, dieses Problem behebenDie Methode 'reopenReadWrite()' kann nicht aufgelöst werden.

+1

Pls. teile deinen Code. –

Antwort

1

Diese Methode mit den @hide javadoc attribute verborgen ist, wie Sie in the source code sehen:

/** 
* 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; 
     } 
    } 
} 

Da es nicht Teil der öffentlichen API ist, können Sie diese Methode nicht verwenden können, ohne Verwenden von Reflektion.

Der beste Weg wäre, nur die Methoden zu verwenden, die sich in der öffentlichen API befinden, listed in the SQLiteDatabase documentation.

Alles, was Sie benötigen sollten, ist die SQLiteOpenHelper#getReadableDatabase() Methode, die wiederum getDatabaseLocked() aufruft, die db.reopenReadWrite() ruft intern:

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

Danke, dass du mir geholfen hast !! –

Verwandte Themen