Passagem de parâmetros via construtor
25/10/2019
0
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
André Freitas
Posts
26/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
26/10/2019
André Freitas
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
26/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
26/10/2019
André Freitas
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
26/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
26/10/2019
André Freitas
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter 'database'
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
27/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter 'database'
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Certo, e o que acontece se dentro do seu override fun onClick(v: View?) você criar um objeto do tipo sqlitehelpercta e outro do tipo sqlitedatabase e passá-los como argumentos para o construtor do contaDAO?
27/10/2019
André Freitas
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter ''database''
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Certo, e o que acontece se dentro do seu override fun onClick(v: View?) você criar um objeto do tipo sqlitehelpercta e outro do tipo sqlitedatabase e passá-los como argumentos para o construtor do contaDAO?
Quando eu coloco como argumento da classe contaDAO não compila, pois diz que as variáveis precisam ser inicializadas.
27/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter ''database''
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Certo, e o que acontece se dentro do seu override fun onClick(v: View?) você criar um objeto do tipo sqlitehelpercta e outro do tipo sqlitedatabase e passá-los como argumentos para o construtor do contaDAO?
Quando eu coloco como argumento da classe contaDAO não compila, pois diz que as variáveis precisam ser inicializadas.
Seja um pouco mais específico, quais variáveis precisam ser inicializadas e qual o tipo de cada uma?
27/10/2019
André Freitas
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter ''database''
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Certo, e o que acontece se dentro do seu override fun onClick(v: View?) você criar um objeto do tipo sqlitehelpercta e outro do tipo sqlitedatabase e passá-los como argumentos para o construtor do contaDAO?
Quando eu coloco como argumento da classe contaDAO não compila, pois diz que as variáveis precisam ser inicializadas.
Seja um pouco mais específico, quais variáveis precisam ser inicializadas e qual o tipo de cada uma?
Eu fiz como você falou
val db: SQLiteDatabase val dh: SQLiteOpenHelper
E passei as váriáveis db e dh como argumentos da classe DAO
val contadao = ContaDAO(db, dh)
Dentro dos parênteses o AS indica que as variáveis precisam ser inicializadas. Com null não dá certo.
27/10/2019
Sadasd
Trata-se de um sistema para gerenciar finanças pessoais. Criei uma classe ContaDAO para fazer a inserção de dados de uma Conta bancária em um BD SQLite. Estou na dúvida de como passo os parâmetros da classe ContaDAO para a classe da activity de cadastro da conta via construtor quando instancio objeto desta classe. No java poderia ter feito as classe ContaDAO sem parâmetros no construtor, mas no Kotlin tive que colocar para inicializar as variáveis. Alguém pode ajudar?
class ContaDAO(database: SQLiteDatabase, dbhelper: SQLiteHelperCta){ var database = database var dbhelper = dbhelper fun incluirConta(c: Conta){ database = dbhelper.writableDatabase val values = ContentValues() values.put(SQLiteHelperCta.KEY_NOME_CONTA, c.nome) values.put(SQLiteHelperCta.KEY_SALDOINICIAL_CONTA, c.saldoinicial) values.put(SQLiteHelperCta.KEY_DESCRICAO_CONTA, c.descricao) database.insert(SQLiteHelperCta.TABLE_CONTA, null, values) database.close() } }
class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) var btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { //val id:Int = SQLiteHelperCta.KEY_ID_CONTA var nome = editTextNomeConta.text.toString() var saldoinicial = editTextSaldoConta.text.toString() var descricao = editTextDescricaoConta.text.toString() var c = Conta (nome, saldoinicial, descricao) var contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Exemplo de instanciação em kotlin com construtor:
class A(num1 : Int, num2 : Int){ var soma : Int init{ soma = num1 + num2 } } fun main(){ val meuObjeto = A(1, 2) println(meuObjeto.soma) } // resultado desse codigo: printa 3 na tela
Meu problema está justamente aí.
Você colocou 1 e 2 como parâmetros da classe A que você criou, algo simples. No meu caso os parâmetros são objetos do tipo SQLitedatabase e SQLiteHelperCta(classe responsável pela criação do banco de dados e tabelas no SQLite)
O mais fácil seria que não houvesse parâmetros, assim como no Java, pois apenas instanciaria a classe ContaDAO e chamaria o método incluirConta(), mas o kotlin me obriga a inicializar as variáveis dentro da classe, o que fiz através do construtor.
Agora, para instanciar a classe ContaDAO eu preciso passar estes dois parâmetros que não sei como fazer. Já tentei Null, mas não aceita.
Espera, não sei se entendi direito seu problema, me explica direito, você precisa de um objeto do tipo sqlitedatabase e sqlitehelpercta disponíveis em duas classes diferentes? se for isso não dá pra simplesmente criar dois objetos desses tipos e deixar eles disponíveis globalmente? Exemplo:
var a = 3 // variável disponível globalmente var b = 2 // variável disponível globalmente class A{ fun imprimir() = println(a + b) // usa as variáveis disponíveis globalmente } class B{ fun imprimir() = println(a - b) // usa as variáveis disponíveis globalmente } fun main() { val a = A() val b = B() a.imprimir() b.imprimir() // printa 5 e 1 }
Até tentei fazer, mas na classe das variáveis globais também é necessário inicializá-las via construtor, quando vou instanciar a classe das variáveis globais na ContaDAO também teria que passar parâmetros via construtor, ou seja, caio no mesmo problema.
Será que você pode me mostrar o erro que aparece ao rodar o seu programa?
Ele nem chega a roda. Mostra essa mensagem:
No value passed for parameter ''database''
Na classe ContaCadastro, na linha 19 eu não passei parâmetro no construtor, porque é justamente isso que tô quebrando a cabeça de como colocar. Coloquei ???? no lugar
package br.edu.ifsp.scl.gerfinsdm3.activity import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import br.edu.ifsp.scl.gerfinsdm3.R import br.edu.ifsp.scl.gerfinsdm3.data.ContaDAO import br.edu.ifsp.scl.gerfinsdm3.model.Conta import kotlinx.android.synthetic.main.activity_cadconta.* class ContaCadastro: AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cadconta) val btnSalvarConta = findViewById<Button>(R.id.btnSalvarConta) btnSalvarConta.setOnClickListener(this) } override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val contadao = ContaDAO(??????, ??????) contadao.incluirConta(c) finish() } }
Certo, e o que acontece se dentro do seu override fun onClick(v: View?) você criar um objeto do tipo sqlitehelpercta e outro do tipo sqlitedatabase e passá-los como argumentos para o construtor do contaDAO?
Quando eu coloco como argumento da classe contaDAO não compila, pois diz que as variáveis precisam ser inicializadas.
Seja um pouco mais específico, quais variáveis precisam ser inicializadas e qual o tipo de cada uma?
Eu fiz como você falou
val db: SQLiteDatabase val dh: SQLiteOpenHelper
E passei as váriáveis db e dh como argumentos da classe DAO
val contadao = ContaDAO(db, dh)
Dentro dos parênteses o AS indica que as variáveis precisam ser inicializadas. Com null não dá certo.
Ah, entendi o erro, você apenas criou as variáveis, mas não inicializou aí, traduzindo o que você fez para java você fez o seguinte:
SqliteDatabase db; SqliteOpenHelper dh; ContaDao contadao = new ContaDao(db, dh);
Só criou as variáveis, mas não deu nenhum valor, a declaração de variáveis em kotlin funciona assim:
var minhastring : String //cria uma variável do tipo String, mas não inicializa, se quisermos uma constante ao invés de variável usamos val var minhastring : String = "oi" //cria uma varável do tipo string e inicializa com o valor oi var minhastring = "oi" //cria uma variável em estilo "dinâmicamente tipável" e atribui a ela o valor oi
O que eu disse para você fazer foi o seguinte:
override fun onClick(v: View?) { val nome = editTextNomeConta.text.toString() val saldoinicial = editTextSaldoConta.text.toString() val descricao = editTextDescricaoConta.text.toString() val c = Conta(nome, saldoinicial, descricao) val sqlitedatabase = SQLiteDatabase() //É assim que se cria um objeto da classe SQLiteDatabase em kotlin val sqlitehelpercta = SQLiteOpenHelper() //É assim que se cria um objeto da classe SQLiteOpenHelper em kotlin val contadao = ContaDAO(sqlitedatabase, sqliteopenhelper) // Passei os objetos criados como argumentos contadao.incluirConta(c) finish() }
Nota importante, eu não passei os argumentos do construtor no SQLiteOpenHelper, então lembre-se de passar esses argumentos para a sua aplicação de acordo com o que você especificou ai.
28/10/2019
André Freitas
Uma coisa que fiz que resolveu o problema da inicialização das variáveis foi colocar a função incluirConta dentro dentro de SQLitehelperconta, dessa forma no evento de clique do botão da activity de cadastro eu instancio essa classe e chamo a função incluirConta para efetuar o cadastro. Acho que não é a melhor solução, mas foi a que deu certo. Infelizmente, não sei por que, a aplicação ainda não está gravando no BD. E não aprece qualquer erro no LOGCAT
Clique aqui para fazer login e interagir na Comunidade :)