почему я не могу вставить данные в файл базы данных, используя язык kotlin? - PullRequest
0 голосов
/ 03 марта 2020

Обновление:

результат

Результат

Код, который вы просили:

confirm.setOnClickListener {

        //CICLO IF PARA O CASO ALGUM CAMPO NÃO ESTEJA PREENCHIDO,  SE preenchido ele passa para o Else que guarda o valor da variavel na coluna da BD


        if (IDinput.text.isEmpty()) {
            Toast.makeText(this, "Código necessário", Toast.LENGTH_SHORT).show()
            IDinput.requestFocus()
        } else {
            val clientes = clientes()
            clientes.codigo_cliente = IDinput.text.toString().toInt()






            if (Nomeinput.text.isEmpty()) {
                Toast.makeText(this, "Precisa de inserir um nome", Toast.LENGTH_LONG).show()
                Nomeinput.requestFocus()
            } else {
                val clientes = clientes()
                clientes.nome_cliente = Nomeinput.text.toString()
            }



                if (Moradainput.text.isEmpty()) {
                    clientes.morada_cliente = ("Sem registo")
                } else {
                    clientes.morada_cliente = Moradainput.text.toString()
                }




                if (Localidadeinput.text.isEmpty()) {
                    clientes.localidade_cliente = ("Sem registo")

                } else {

                    clientes.localidade_cliente = Localidadeinput.text.toString()
                }


                if (cod1.text.isEmpty()) {
                    clientes.postal_cliente = ("Sem registo")
                } else {

                    clientes.postal_cliente = cod1.text.toString()
                }




                if (Contribuinteinput.text.isEmpty()) {
                    Toast.makeText(this, "Precisa de inserir o contribuinte", Toast.LENGTH_LONG)
                        .show()
                    Contribuinteinput.requestFocus()
                } else {
                    val clientes = clientes()
                    clientes.contribuinte_cliente = Contribuinteinput.text.toString()
                }




                    if (Telefoneinput.text.isEmpty()) {
                        clientes.telefone_cliente = ("Sem registo")
                    }else {

                        clientes.telefone_cliente = Telefoneinput.text.toString()
                    }


                    if (Zonainput.text.isEmpty()) {
                        Toast.makeText(this, "Precisa de inserir o pais", Toast.LENGTH_LONG)
                            .show()
                        Zonainput.requestFocus()
                    } else {
                        val clientes = clientes()
                        clientes.pais_cliente = Zonainput.text.toString()




                    Menu_Clientes.IS4.addClient(this,clientes)
                    IDinput.requestFocus()
                    Nomeinput.requestFocus()
                    Contribuinteinput.requestFocus()
                    Zonainput.requestFocus()

                    }


                }


            }
        }
    }

хорошо, больше нет сообщения об ошибке, но когда я вставляю данные, подобные изображению: форма , он не отправляет никаких данных, вот что происходит: recyclerView .

И база данных, даже когда я чищу, когда я перезагружаю приложение, он всегда запускается так.

База данных

class IS4(context: Context, name : String?, factory:SQLiteDatabase.CursorFactory?, version : Int) :
SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION){

companion object {
    private val DATABASE_NAME = "IS4.db"
    private val DATABASE_VERSION = 1

    private val CLIENTES_TABLE_NAME = " Cliente"
    private val COL_1 = "Codigo"
    private val COL_2 = "Nome"
    private val COL_3 = "Morada"
    private val COL_4 = "Localidade"
    private val COL_5 = "Codigo_postal"
    private val COL_6 = "Contribuinte"
    private val COL_7 = "Telefone"
    private val COL_8 = "Pais"
}

override fun onCreate(db: SQLiteDatabase?) {
    val CREATE_CLIENTES_TABLE = ("CREATE TABLE $CLIENTES_TABLE_NAME(" +
            "$COL_1 INTEGER," +
            "$COL_2 TEXT," +
            "$COL_3 TEXT," +
            "$COL_4 TEXT," +
            "$COL_5 TEXT," +
            "$COL_6 TEXT," +
            "$COL_7 TEXT," +
            "$COL_8 TEXT )")
    db?.execSQL(CREATE_CLIENTES_TABLE)
}

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

fun getClient (mCtx : Context) : ArrayList<clientes>{
    val qry = "Select * From $CLIENTES_TABLE_NAME"
    val db = this.readableDatabase
    val cursor = db.rawQuery(qry,null)
    val clientex = ArrayList<clientes>()

    if (cursor.count == 0 )
        Toast.makeText(mCtx, "Sem Clientes adicionados", Toast.LENGTH_SHORT).show() else {
        while (cursor.moveToNext()) {
            val clientes = clientes()
            clientes.codigo_cliente = cursor.getInt(cursor.getColumnIndex(COL_1))
            clientes.nome_cliente = cursor.getString(cursor.getColumnIndex(COL_2))
            clientes.morada_cliente = cursor.getString(cursor.getColumnIndex(COL_3))
            clientes.localidade_cliente = cursor.getString(cursor.getColumnIndex(COL_4))
            clientes.postal_cliente = cursor.getString(cursor.getColumnIndex(COL_5))
            clientes.contribuinte_cliente = cursor.getString(cursor.getColumnIndex(COL_6))
            clientes.telefone_cliente = cursor.getString(cursor.getColumnIndex(COL_7))
            clientes.pais_cliente = cursor.getString(cursor.getColumnIndex(COL_8))
            clientex.add(clientes)
        }

    }
    cursor.close()
    db.close()
    return clientex
}


fun addClient(mCtx: Context, clientes: clientes){
    val values = ContentValues()
    values.put(COL_1,clientes.codigo_cliente)
    values.put(COL_2,clientes.nome_cliente)
    values.put(COL_3,clientes.morada_cliente)
    values.put(COL_4,clientes.localidade_cliente)
    values.put(COL_5,clientes.postal_cliente)
    values.put(COL_6,clientes.contribuinte_cliente)
    values.put(COL_7,clientes.telefone_cliente)
    values.put(COL_8,clientes.pais_cliente)
    val db = this.writableDatabase

    try {
        db.insert(CLIENTES_TABLE_NAME,null,values)
        Toast.makeText(mCtx,"Cliente Adicionado", Toast.LENGTH_SHORT).show()
    } catch (e : Exception){
        Toast.makeText(mCtx,e.message,Toast.LENGTH_SHORT).show()

    }
    db.close()
}

Модель

class clientes {
var codigo_cliente: Int? = 0
var nome_cliente: String? = ""
var morada_cliente: String? = ""
var localidade_cliente: String? = ""
var postal_cliente: String? = ""
var contribuinte_cliente: String? = ""
var telefone_cliente: String? = ""
var pais_cliente: String? = ""

listview

private fun  verClientes(){
    val clienteslista = IS4 .getClient(this)
    val adapter = clientesAdapter(this,clienteslista)
    val rv : RecyclerView = findViewById(R.id.rv)
    rv.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL,false) as RecyclerView.LayoutManager
    rv.adapter = adapter
}

Адаптер

class clientesAdapter (mCtx : Context, val clientes : ArrayList<clientes>) : RecyclerView.Adapter<clientesAdapter.ViewHolder>()
    {
    val mCtx = mCtx

    class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView){


        val IDcliente_view = itemView.IDcliente_view
        val Name_view = itemView.Name_view
        val delete_button = itemView.delete_button
        val update_button = itemView.update_button

    }

    override fun onCreateViewHolder(p0: ViewGroup, p1: Int): clientesAdapter.ViewHolder {

        val v = LayoutInflater.from(p0.context).inflate(R.layout.menu_client_app,p0,false)
        return ViewHolder(v)

    }

    override fun getItemCount(): Int {
        return clientes.size
    }

    override fun onBindViewHolder(p0: clientesAdapter.ViewHolder, p1: Int) {
        val client : clientes = clientes[p1]
        p0.IDcliente_view.text = client.codigo_cliente.toString()
        p0.Name_view.text = client.nome_cliente

    }
}

После исправления ошибки проблема сейчас в вставке, он не распознает никаких значений, только "pais" = значение страны.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы установили ID_cliente в качестве Первичного ключа в таблице cliente , что означает, что значение должно быть уникальным для каждой записи.

Попытка вставить несколько записей с одинаковым ID_cliente, в результате чего cra sh.

Кроме того, обновите свои операторы if/else с

if (Moradainput.text.isEmpty())
    clientes.morada_cliente = ("Sem registo") else

    clientes.morada_cliente = Moradainput.text.toString()

до:

if (Moradainput.text.isEmpty()) {
    clientes.morada_cliente = ("Sem registo")
} else {
    clientes.morada_cliente = Moradainput.text.toString()
}
0 голосов
/ 03 марта 2020

Вы пытаетесь сохранить клиента с ID_cliente = 0 более одного раза.

В вашем столе cliente есть ID_cliente как Первичный ключ , поэтому вы не можете иметь больше чем 1 cliente с тем же ID_cliente.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...