Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs

Início rápido - SDK do Kotlin

Nesta página

  • Definir seu modelo de objeto
  • Abrir um Realm
  • Criar, ler, atualizar e excluir objetos
  • Fique atento às mudanças
  • Fechar um Realm
  • Adicionar Device Sync (opcional)
  • Pré-requisitos
  • Inicialize o aplicativo
  • Autenticar um usuário
  • Abrir um realm sincronizado
  • Próximo: Confira os aplicativos de modelo e o tutorial

Esta página contém informações para usar rapidamente o Realm com o Kotlin SDK. A seção opcional Adicionar Device Sync ilustra como obter o Atlas Device Sync integrado em seu aplicativo.

Antes de começar, certifique-se de ter instalado o Kotlin SDK para sua plataforma.

Observação

Usando este início rápido com KMP

Se você estiver executando este projeto em um novo projeto de modelo Kotlin Multiplataforma (KMP), você pode copiar e colar os seguintes trechos no método Greeting.greeting() no módulo commonMain .

O modelo de dados do aplicativo define a estrutura de dados armazenados no Realm. Você pode definir o modelo de dados do seu aplicativo por meio de classes Kotlin no código do aplicativo com Realm Object Models.

Para definir o modelo de dados do aplicativo, adicione uma definição de classe ao código do aplicativo. O exemplo abaixo ilustra a criação de um modelo 'Item' que representa itens Todo em um aplicativo de lista Todo.

class Item() : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var isComplete: Boolean = false
var summary: String = ""
var owner_id: String = ""
constructor(ownerId: String = "") : this() {
owner_id = ownerId
}
}

Use RealmConfiguration.create() para abrir um realm utilizando parâmetros padrão. Passe sua configuração para o construtor de fábrica do realm para gerar uma instância desse realm:

val config = RealmConfiguration.create(schema = setOf(Item::class))
val realm: Realm = Realm.open(config)

Para obter mais informações sobre como controlar as especificidades do RealmConfiguration que você gostaria de abrir (por exemplo. nome, localização, versão do esquema), consulte Abrir e fechar um idioma.

Depois de aberto, você pode criar objetos dentro de um domínio em um bloco de transação de gravação.

Para criar uma nova Item, instancie uma instância da classe Item e adicione-a ao domínio em um bloco de transação de gravação:

realm.writeBlocking {
copyToRealm(Item().apply {
summary = "Do the laundry"
isComplete = false
})
}

Você pode recuperar uma coleção de todos os itens do Todo no realm com query.find():

// all items in the realm
val items: RealmResults<Item> = realm.query<Item>().find()

Você também pode filtrar uma coleção para recuperar uma coleção mais específica de objetos:

// items in the realm whose name begins with the letter 'D'
val itemsThatBeginWIthD: RealmResults<Item> =
realm.query<Item>("summary BEGINSWITH $0", "D")
.find()
// todo items that have not been completed yet
val incompleteItems: RealmResults<Item> =
realm.query<Item>("isComplete == false")
.find()

Encontre mais informações sobre queries de string Realm em Filtrardados.

Para modificar um item Todo, atualize suas propriedades em um bloco de transação de escrita:

// change the first item with open status to complete to show that the todo item has been done
realm.writeBlocking {
findLatest(incompleteItems[0])?.isComplete = true
}

Finalmente, você pode excluir um item Todo chamando mutableRealm.delete() em um bloco de transação de gravação:

// delete the first item in the realm
realm.writeBlocking {
val writeTransactionItems = query<Item>().find()
delete(writeTransactionItems.first())
}

Você pode assistir a um domínio, coleção ou objeto para alterações com o método observe.

Importante

Limitações sem servidor

Você não poderá observar alterações se a fonte de dados for uma instância sem servidor do Atlas. Atualmente, o MongoDB serverless não oferece suporte a fluxos de alterações, que são usados em coleções monitoradas para escutar alterações.

No exemplo a seguir, escutamos alterações em todos os objetos Item .

// flow.collect() is blocking -- run it in a background context
val job = CoroutineScope(Dispatchers.Default).launch {
// create a Flow from the Item collection, then add a listener to the Flow
val itemsFlow = items.asFlow()
itemsFlow.collect { changes: ResultsChange<Item> ->
when (changes) {
// UpdatedResults means this change represents an update/insert/delete operation
is UpdatedResults -> {
changes.insertions // indexes of inserted objects
changes.insertionRanges // ranges of inserted objects
changes.changes // indexes of modified objects
changes.changeRanges // ranges of modified objects
changes.deletions // indexes of deleted objects
changes.deletionRanges // ranges of deleted objects
changes.list // the full collection of objects
}
else -> {
// types other than UpdatedResults are not changes -- ignore them
}
}
}
}

Mais tarde, quando terminar de observar, cancele o trabalho para cancelar o coroutine:

job.cancel() // cancel the coroutine containing the listener

Para fechar um realm e todos os recursos subjacentes, chame realm.close(). O método close() bloqueia até que todas as transações de gravação no domínio tenham sido concluídas.

realm.close()

Esta seção ilustra como autenticar com um usuário anônimo e abrir um domínio de Flexible Sync para começar a sincronizar dados entre dispositivos.

Os trechos de código nesta seção exigem o seguinte:

Para usar as funcionalidades do App Services, como autenticação e sincronização, acesse o App Services App usando seu ID do aplicativo. O ID do aplicativo está disponível na UI do App Services.

val app = App.create(YOUR_APP_ID)

Para autenticar e fazer login de um usuário, chame App.login. Quando a autenticação anônima está ativada, os usuários podem fazer login imediatamente no seu aplicativo sem fornecer nenhuma informação de identificação:

val credentials = Credentials.anonymous()
val user = app.login(credentials)

Depois de inicializar seu Atlas App Services App App, autenticar um usuário e definir seu modelo de objeto, você pode criar uma SyncConfiguration.

Se você abriu um domínio local seguindo a seção Abrir um Realm acima, substitua a RealmConfiguration pelo SyncConfiguration descrito abaixo.

Passe o usuário autenticado e a classe Item para a função SyncConfiguration.Builder para criar uma Configuração de Flexible Sync.

Importante

Assinaturas iniciais

Você precisa de pelo menos uma assinatura antes de ler ou gravar no realm. Use initialSubscriptions para definir o conjunto de assinaturas iniciais quando o arquivo Realm for aberto pela primeira vez. Passe a query que você deseja se inscrever e um nome para a assinatura para a função add().

O exemplo abaixo especifica uma assinatura chamada "Itens do Usuário" com todos os objetos Item.

// create a SyncConfiguration
val config = SyncConfiguration.Builder(
user,
setOf(Item::class)
) // the SyncConfiguration defaults to Flexible Sync, if a Partition is not specified
.initialSubscriptions { realm ->
add(
realm.query<Item>(
"owner_id == $0", // owner_id == the logged in user
user.id
),
"User's Items"
)
}
.build()
val realm = Realm.open(config)

Confira o template app para experimentar outra maneira rápida de começar a programar com o Realm Kotlin SDK. O modelo Kotlin SDK, denominado android.kotlin.todo.flex, é um aplicativo predefinido que integra o Realm e o Atlas Device Sync em um aplicativo Android personalizável.

Como alternativa, se você estiver interessado em uma experiência guiada, leia nosso tutorial do Kotlin SDK, que expande o aplicativo modelo.

Próximo

Bem-vindo aos Docs do Atlas Device SDK