2017-06-11 2 views
1

J'ai créé ma base de données d'application comme ci-dessous. Je veux insérer RecordNow et récupérer comme ce lien dit https://antonioleiva.com/databases-anko-kotlin/ à utiliser database.useImplémentation de SQLite dans Kotlin et Anko

import android.database.sqlite.SQLiteDatabase 
import org.jetbrains.anko.db.* 


class AppDbHelpler : ManagedSQLiteOpenHelper(AppApplication.instance(), AppDbHelpler.DB_NAME, null, AppDbHelpler.DB_VERSION) { 

    companion object { 
     val DB_NAME = "person.db" 
     val DB_VERSION = 1 
     val instance by lazy { AppDbHelpler() } 
    } 

    override fun onCreate(db: SQLiteDatabase?) { 
     db!!.createTable(PersonTable.Name, true, 
       Pair(PersonTable.ID, INTEGER + PRIMARY_KEY + AUTOINCREMENT), 
       Pair(PersonTable.PersonName, TEXT), 
       Pair(PersonTable.Domain, TEXT), 
       Pair(PersonTable.MobileNumber, REAL)) 
    } 

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { 
     db!!.dropTable(PersonTable.Name, true) 
     onCreate(db) 
    } 
} 

// Access property for Context 
val Context.database: AppDbHelpler 
get() = AppDbHelpler() 

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 

    insertPerson() 
} 


fun insertPerson() { 
    database.use { 

    } 
} 

Quelqu'un peut-il me allusion quelle ligne est pour val Context.database: AppDbHelpler get() = AppDbHelpler(). Ce qu'il fait ?

Répondre

4

val Context.database est une utilisation de extensions dans Kotlin. Ils permettent d'accéder à la valeur database chaque fois que vous êtes dans une classe (ou une autre fonction) en utilisant Context. La méthode get() ci-dessous définit property de cette variable. Il est équivalent à une méthode getDatabase() en Java, où il retournera le AppDbHelper comme indiqué. Le faire de cette façon vous permet de récupérer l'aide en utilisant la syntaxe variable. Puisque le getter est une fonction, il va créer une nouvelle aide à chaque fois, plutôt que de voir comment une variable réelle va se comporter avec une seule affectation. Notez également que puisqu'il s'agit d'un val, une méthode set n'est pas fournie.

Le code est équivalent à

public static AppDbHelper getDatabase(Context context) { 
    return new AppDbHelper(); 
} 

en Java

+0

'Extensions'- Est-ce que cela vous permet de rendre les variables accessibles à partir de n'importe où, dépend avant le type de point. Si c'est "Contexte" alors cela permet d'appeler cette méthode où vous avez 'Contexte'. Si je spécifie 'X' alors cela me permettra d'appeler ceci où j'ai' X' disponible. Est-ce ainsi que cela fonctionne? –

+0

Dans ce cas particulier, si vous êtes dans une activité (qui étend le contexte), vous pouvez directement écrire 'database' pour l'utiliser. Si vous êtes dans une vue, vous ne pouvez pas l'utiliser directement. Mais vous pouvez appeler 'context.database'. Notez que 'context' dans Views renvoie directement à' getContext() '. Si vous connaissez les méthodes 'with' ou' apply' dans Kotlin, vous pouvez utiliser 'context.apply {database}' pour l'obtenir. Les extensions vous permettent d'utiliser les méthodes/variables comme si elles faisaient partie de la classe d'origine. Mais à la fin, il est appelé statiquement, donc vous ne créez pas de classe personnalisée. –