lorsque LauncherProvider.DatabaseHelper.convertDatabase (SQLiteDatabase db) retourne true dans le lanceur par défaut Android?

StackOverflow https://stackoverflow.com/questions/9374673

  •  28-10-2019
  •  | 
  •  

Question

Je rencontre un problème lors de la lecture du code source du lanceur par défaut d'Android 2.2.
le segment de code source de LauncherProvider.DatabaseHelper:

@Override
public void onCreate(SQLiteDatabase db) {
    if (LOGD)
    Log.d(TAG, "creating new launcher database");

    db.execSQL("CREATE TABLE favorites (" + "_id INTEGER PRIMARY KEY,"
        + "title TEXT," + "intent TEXT," + "container INTEGER,"
        + "screen INTEGER," + "cellX INTEGER," + "cellY INTEGER,"
        + "spanX INTEGER," + "spanY INTEGER," + "itemType INTEGER,"
        + "appWidgetId INTEGER NOT NULL DEFAULT -1,"
        + "isShortcut INTEGER," + "iconType INTEGER,"
        + "iconPackage TEXT," + "iconResource TEXT," + "icon BLOB,"
        + "uri TEXT," + "displayMode INTEGER" + ");");

    // Database was just created, so wipe any previous widgets
    if (mAppWidgetHost != null) {
    mAppWidgetHost.deleteHost();
    sendAppWidgetResetNotify();
    }

    if (!convertDatabase(db)) {
    // Populate favorites table with initial favorites
    loadFavorites(db);
    }
}

private boolean convertDatabase(SQLiteDatabase db) {
    if (LOGD)
    Log.d(TAG,
        "converting database from an older format, but not onUpgrade");
    boolean converted = false;

    final Uri uri = Uri.parse("content://" + Settings.AUTHORITY
        + "/old_favorites?notify=true");
    final ContentResolver resolver = mContext.getContentResolver();
    Cursor cursor = null;

    try {
    cursor = resolver.query(uri, null, null, null, null);
    } catch (Exception e) {
    // Ignore
    }

    // We already have a favorites database in the old provider
    if (cursor != null && cursor.getCount() > 0) {
    try {
        converted = copyFromCursor(db, cursor) > 0;
    } finally {
        cursor.close();
    }

    if (converted) {
        resolver.delete(uri, null, null);
    }
    }

    if (converted) {
    // Convert widgets from this import into widgets
    if (LOGD)
        Log.d(TAG, "converted and now triggering widget upgrade");
    convertWidgets(db);
    }

    return converted;
}

onCreate() est appelé pour créer une base de données lorsqu'il n'y a pas de base de données dans le système.À la fin de onCreate (), il appelle convertDatabase (SQLiteDatabase db).Et il y a des codes de requête dans convertDatabase (SQLiteDatabase db) .Je suis confus.Pourquoi interroger onCreate ()?quand convertDatabase (SQLiteDatabase db) retournera true?Ma version Android est 2.2

Était-ce utile?

La solution

Un certain contexte peut être récupéré à partir des messages du journal:

if (LOGD) Log.d(TAG, "converting database from an older format, but not onUpgrade");

S'il y avait une base de données dans l'ancien format, convertDatabase() copie toutes les entrées dans la nouvelle en utilisant copyFromCursor où le curseur pointe vers l'ancienne instance puis la supprime.Ainsi, la méthode retournera true si elle a trouvé et converti une instance de la base de données dans l'ancien format et false sinon.

Comme le lanceur s'appelle en fait Launcher2, il essaie probablement de trouver des traces du prédécesseur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top