SQLite Datenbank in Kotlin - App stürtzt immer ab

C

Crusha09

Neues Mitglied
Hey,

ich bin neu in Java bzw. Kotlin und Co.
dabei bin ich bei einem Übungsprojekt auf ein Problem gestoßen was ich selbst nicht lösen kann. Ich habe "gegoogelt" wie ein irrer und finde den Fehler nicht.


Zu meiner App:
Es ist eine simple Einkaufsliste. Auf der MainActivity soll eine Liste mit den Einkäufen angezeigt werden die ein der NewActivity erzeugt werden.
Die Daten sollen einzeln und alle zusammen gelöscht werden können.

später sollen vielleicht noch einzelne Einkaufzettel erstellt werden können also Kategorien oder so.



Das Problem:
Aus irgend einem Problem, Stürzt die App schon beim Start ab, ohne eine Fehlermeldung aus zu geben.
Der Fehler ist irgendwo im SQLite-Code aber ich hab keine Ahnung was ich falsch mache.
ich hoffe ihr könnt mir weiterhelfen.

Die Projekt Dateien: http://uploaded.net/file/y4r4gdgm

MainActivity:
Java:
package com.example.einkaufsliste

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {


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

        // Ausgabe der Tabelle
        TableHelper(this).alleEintraege()


        // Button Neu (btn_New)
        btn_new.setOnClickListener {
            val btnNew = Intent(this, NewActivity::class.java)
            startActivity(btnNew)
        }

    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        val inflater = menuInflater
        inflater.inflate(R.menu.main_menu, menu)
        return true
    }

    //Button(Menu) Zurück zur MainActivity
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.btn_info -> {
                info("")
                startActivity(intent)
                return super.onOptionsItemSelected(item)
            }
            else -> return super.onOptionsItemSelected(item)
        }
    }
    private fun info(msg: String) {
        Toast.makeText(this, msg, Toast.LENGTH_LONG)
        intent = Intent(this, InfoActivity::class.java)
    }


}

NewActivity:
Java:
package com.example.einkaufsliste

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_new.*
import java.util.jar.Attributes


class NewActivity : AppCompatActivity() {



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

        btn_aktion.setOnClickListener {
            val dbHandler = MindOrksDBOpenHelper(this, null)
            val user = Attributes.Name(text_einkauf_eingabe.text.toString())
            dbHandler.addEinkauf(user)
            Toast.makeText(this, text_einkauf_eingabe.text.toString() + " auf die Liste", Toast.LENGTH_LONG).show()
        }

    }


        override fun onCreateOptionsMenu(menu: Menu): Boolean {
            val inflater = menuInflater
            inflater.inflate(R.menu.menu_back, menu)
            return true
        }

        //Button(Menu) Zurück zur MainActivity
        override fun onOptionsItemSelected(item: MenuItem): Boolean {
            when (item.itemId) {
                R.id.btn_back -> {
                    back("")
                    startActivity(intent)
                    return super.onOptionsItemSelected(item)
                }
                else -> return super.onOptionsItemSelected(item)
            }
        }
        private fun back(msg: String) {
            Toast.makeText(this, msg, Toast.LENGTH_LONG)
            intent = Intent(this, MainActivity::class.java)
        }
}

DatenbankKlasse:
Java:
package com.example.einkaufsliste

import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper


class DatenbankKlasse(context: Context):
    SQLiteOpenHelper(context, "Einkaufsliste.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("CREATE TABLE [einkaufsliste]" +
                " ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
                "[einkauf] TEXT NOT NULL, [wert] INTEGER NOT NULL)")
    }

    override fun onUpgrade(db: SQLiteDatabase,
                           versionAlt: Int, versionNeu: Int) {
    }
}

Einkauf:
Java:
package com.example.einkaufsliste


class Einkauf  {
    var id: Int = 0
    var meinEinkauf: String? = null
    constructor(id: Int, meinEinkauf: String) {
        this.id = id
        this.meinEinkauf = meinEinkauf
    }
    constructor(meinEinkauf: String) {
        this.meinEinkauf = meinEinkauf
    }
}

TableHelper
Java:
package com.example.einkaufsliste

import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.os.Build
import android.os.Build.ID
import android.util.Log
import com.example.einkaufsliste.MindOrksDBOpenHelper.Companion.COLUMN_EINKAUF
import com.example.einkaufsliste.MindOrksDBOpenHelper.Companion.TABLE_EINKAUF
import java.net.IDN

class TableHelper( context: Context) {

    private val helper = MindOrksDBOpenHelper(context, factory = null)

    fun speichereNeuenEintrag(daten: Einkauf): Long {
        //Öffnet eine beschreibbare Datenbank
        val db = helper.writableDatabase
        //Ein Datensatz ist eine Zeile in der SQLite Datenbank
        val datensatz = ContentValues()
        datensatz.put(COLUMN_EINKAUF, daten.meinEinkauf)

        db.beginTransaction()
        //Der Rückgabewert, also die ID des gespeicherten Objekts wird hier zurückgegeben.
        val id: Long = try {
            val id = db.insert(TABLE_EINKAUF, null, datensatz)
            db.setTransactionSuccessful()
            id
        }
        //Wenn die Operation beendet ist: empfange den Rückgabewert
        finally {
            db.endTransaction()
            db.close()
        }
        Log.i("test", "Datensatz in TABLE_Einkauf eingefügt. $id")
        return id
    }
    fun alleEintraege(): ArrayList<Einkauf>{
        val auswahl = arrayOf(TABLE_EINKAUF)
        val db = helper.writableDatabase
        val cursor = db.query(COLUMN_EINKAUF, auswahl, null, null, null, null, null)

        val ergebnisListe = ArrayList(alleEintraege())
        while (cursor.moveToNext()){
            var rueckgabe = Einkauf(0,"")
            rueckgabe.id = cursor.getInt(cursor.getColumnIndex(Build.ID))
            ergebnisListe.add(rueckgabe)
        }
        Log.i("test", "Ergebnisliste Alle Jobs enthält: $ergebnisListe")
        cursor.close()
        return ergebnisListe
    }
    fun loescheDatensatz(id :Int){
        val db = helper.writableDatabase
        db.delete(TABLE_EINKAUF,"${Build.ID}  = $id", null)
    }

}

MindOrksDBOpenHelper:
Java:
package com.example.einkaufsliste

import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import java.util.jar.Attributes

class MindOrksDBOpenHelper(context: Context,
                           factory: SQLiteDatabase.CursorFactory?) :
    SQLiteOpenHelper(context, DATABASE_EINKAUF, null
        , DATABASE_VERSION) {
    override fun onCreate(db: SQLiteDatabase) {
        val TABLE_EINKAUF = ("CREATE TABLE " +
                TABLE_EINKAUF + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY," +
                COLUMN_EINKAUF
                + " TEXT" + ")")
        db.execSQL(TABLE_EINKAUF)

    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_EINKAUF)
        onCreate(db)

    }

    fun addEinkauf(einkauf: Attributes.Name) {
        val values = ContentValues()
        values.put(COLUMN_EINKAUF, einkauf.javaClass.toString())
        val db = this.writableDatabase
        db.insert(TABLE_EINKAUF, null, values)
        db.close()
    }
    fun getAllName(): Cursor? {
        val db = this.readableDatabase
        return db.rawQuery("SELECT * FROM $TABLE_EINKAUF", null)
    }
    companion object {
        private val DATABASE_VERSION = 1
        private val DATABASE_EINKAUF = "Einkaufsliste.db"
        val TABLE_EINKAUF = "Einkauf"
        val COLUMN_ID = "id"
        val COLUMN_EINKAUF = "meinEinkauf"
    }
}

Ich bedanke mich im Voraus..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Android SQLite Datenbank auf SDCard speichern Android & Cross-Platform Mobile Apps 5
J SQLite Datenbank sichern/in ein anderes Verzeichnis kopieren Android & Cross-Platform Mobile Apps 2
B Android SQLite Datenbank 2 Einträge vertauschen? Android & Cross-Platform Mobile Apps 14
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
B Android SQLite Datenbankdatei von SD-Karte zu DatabasePath kopieren Android & Cross-Platform Mobile Apps 5
L Android SQLite mit HSQLDB über Android synchronisieren Android & Cross-Platform Mobile Apps 13
K Android SQLite Query "WHERE _id in (X, Y, Z)" keine Daten Android & Cross-Platform Mobile Apps 6
T Android SQLite getColumnIndex Android & Cross-Platform Mobile Apps 6
N Android Ich kann mit meiner App nicht auf die Datenbank zugreifen Android & Cross-Platform Mobile Apps 4
J Android Probleme mit der Realm Datenbank Android & Cross-Platform Mobile Apps 3
M App Datenbank Server Android & Cross-Platform Mobile Apps 5
J Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ? Android & Cross-Platform Mobile Apps 8
B Android Probleme mit Realm Datenbank Android & Cross-Platform Mobile Apps 2
W Gezielte Ausgabe von abgefragten Inhalt aus Datenbank Android & Cross-Platform Mobile Apps 1
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
EisKaffee Android Datenbank auf real Device Android & Cross-Platform Mobile Apps 4
S Dynamische EditText View eingaben in Datenbank speichern Android & Cross-Platform Mobile Apps 0
D Android-App Datenbank Android & Cross-Platform Mobile Apps 4
C Android Listen/Daten aus der SQLLite Datenbank darstellen Android & Cross-Platform Mobile Apps 2
F Android Datenbank upgrade wird nicht durchgeführt Android & Cross-Platform Mobile Apps 2
P J2ME - Anbindung an externe Datenbank Android & Cross-Platform Mobile Apps 3
M Welche Datenbank für J2ME? Android & Cross-Platform Mobile Apps 5
M Datenbank Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben