Можете ли вы помочь решить проблему с отсутствующим столбцом? Мне кажется, что я все сделал правильно, но я получаю ошибку, что что-то не так с одним столбцом.
ОШИБКА
E / SQLiteLog: (1) нет такой столбец: Stezen ie D / AndroidRuntime: завершение работы VM E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.apkadlapacjenta, PID: 11261 java .lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.example.apkadlapacjenta / com.example.apkadlapacjenta.HistoriaPomiarow}: android .database.sqlite.SQLiteException: нет такого столбца: Stezenie (код 1 SQLITE_ERROR):, при компиляции: SELECT Id, Stezen * 1028 , Zegar, Data, Posilek, Stres, Samopoczu cie, Гипергликемия ОТ Pomiary в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3270) в android .app.ActivityThread .handleLaunchActivity (ActivityThread. java: 3409) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCall обратно (TransactionExecutor. java: 135) на android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 95) на android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler.dispatchMessage (Обработчик. java: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app. ActivityThread.main (ActivityThread. java: 7356) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java : 492) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 930) Причина: android .database.sqlite.SQLiteException: нет такого столбца: Stezen ie (код 1 SQLITE_ERROR): при компиляции: SELECT Id, Stezen ie, Zegar, Data, Posilek, Stres, Samopoczu cie, Hiperglikemia FROM Pomiary в android .database.sqlite.SQLiteConnection.nativePrepareStatement (собственный метод) в android .database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection. java: 986) в android .database.sqlite .SQLiteConnection.prepare (SQLiteConnection. java: 593) в android .database.sqlite.SQLiteSession.prepare (SQLiteSession. java: 590) в android .database.sqlite.SQLiteProgram. (SQLiteProgram. java: 61) в android .database.sqlite.SQLiteQuery. (SQLiteQuery. java: 37) в android .database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver. java: 46) в android. database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase. java: 1443) в android .database.sqlite.SQLiteQueryBuilder.query (SQLiteQueryBuilder. java: 515) в android .database.sqlite.SQLilquBery SQLiteQueryBuilder. java: 392) на com.example.apkadlapacjenta.DbMenager.Query (DbMenager.kt: 65) на com.example.apkadlapacjenta.HistoriaPomiarow.LoadQuery (HistoriaPample. At. apkadlapacjenta.HistoriaPomiarow.onCreate (HistoriaPomiarow.kt: 33) в android .app.Activity.performCreate (Activity. java: 7802) в android .app.Activity.performCreate (Activity. java : 7791) в android .app.Instrumentation.callActivi tyOnCreate (Instrumentation. java: 1299) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3245) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3409) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 135) в android .app.servertransaction.TransactionExecutor .execute (TransactionExecutor. java: 95) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler.dispatchMessage (Обработчик. java: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app.ActivityThread.main (ActivityThread. java: 7356) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit . java: 492) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 930) I / Процесс: отправка сигнала. PID: 11261 SIG: 9 Отключен от целевой виртуальной машины, адрес: «localhost: 8630», транспорт: «сокет»
ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ
package com.example.apkadlapacjenta
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.SearchView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_historia_pomiarow.*
import kotlinx.android.synthetic.main.content_historia_pomiarow.*
import kotlinx.android.synthetic.main.row.view.deleteBtn
import kotlinx.android.synthetic.main.row1.view.*
@Suppress("DEPRECATION")
class HistoriaPomiarow : AppCompatActivity() {
var listaWynikow = ArrayList<FIrebaseVal>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_historia_pomiarow)
setSupportActionBar(toolbar)
//Wczytujemy baze danych
LoadQuery("%")
}
override fun onResume() {
super.onResume()
LoadQuery("%")
}
private fun LoadQuery(pomiary: String) {
val dbManager = DbMenager(this)
val projections = arrayOf(
"Id",
"Stezenie",
"Zegar",
"Data",
"Posilek",
"Stres",
"Samopoczucie",
"Hiperglikemia"
)
val selectionArgs = arrayOf(pomiary)
val cursor =
dbManager.Query(projections,null,null,null)
listaWynikow.clear()
if (cursor.moveToFirst()) {
do {
val ID = cursor.getInt(cursor.getColumnIndex("Id"))
val Stezenie = cursor.getString(cursor.getColumnIndex("Stezenie"))
val Zegar = cursor.getString(cursor.getColumnIndex("Zegar"))
val Data = cursor.getString(cursor.getColumnIndex("Data"))
val Posilek = cursor.getString(cursor.getColumnIndex("Posilek"))
val Stres = cursor.getString(cursor.getColumnIndex("Stres"))
val Samopoczucie = cursor.getString(cursor.getColumnIndex("Samopoczucie"))
val Hiperglikemia = cursor.getString(cursor.getColumnIndex("Hiperglikemia"))
listaWynikow.add(
FIrebaseVal(
ID,
Stezenie,
Zegar,
Data,
Posilek,
Stres,
Samopoczucie,
Hiperglikemia ))
} while (cursor.moveToNext())
}
//Adapter
val ListaWynikowAdapter = MylistApdater(this, listaWynikow)
//ustawienia adaptera
listapomiarow.adapter = ListaWynikowAdapter
// Wszystkie zadania
val total = listapomiarow.count
//actionbar
val mActionBar = supportActionBar
if(mActionBar !=null){
//ustawienia Action Bara
mActionBar.subtitle = "Masz $total wyników"
}
}
override fun onCreateOptionsMenu(menu: Menu?):Boolean {
menuInflater.inflate(R.menu.notemenu, menu)
//searchView
val sv: SearchView = menu!!.findItem(R.id.app_bar_search).actionView as SearchView
val sm = getSystemService(Context.SEARCH_SERVICE) as SearchManager
sv.setSearchableInfo(sm.getSearchableInfo(componentName))
sv.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
//implementujemy dwie metody
override fun onQueryTextSubmit(query: String?): Boolean {
LoadQuery("%$query%")
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
LoadQuery("%$newText%")
return false
}
})
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.dodaj_notatke->{
startActivity(Intent(this,AddNote::class.java))
}
R.id.sortuj->{
showSortDialog()
}
}
return super.onOptionsItemSelected(item)
}
private fun showSortDialog() {
//lista opcji
val sortOption = arrayListOf("Najnowsze","starsze","Tytul rosnaco","Tytul malejaco")
val mBuilder = AlertDialog.Builder(this)
mBuilder.setTitle("Sort by")
mBuilder.setIcon(R.drawable.ic_sort)
}
inner class MylistApdater(
context: Context,
private var ListaWynikowAdapter: ArrayList<FIrebaseVal>
) : BaseAdapter() {
var listWynikiArray = ArrayList<FIrebaseVal>()
var context: Context? = context
@SuppressLint("ViewHolder","InflateParams")
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val myView = layoutInflater.inflate(R.layout.row1, null)
val Wynik = ListaWynikowAdapter[position]
myView.stezenienumberpicker.text = Wynik.nodeNumberPicker.toString()
myView.godzina.text = Wynik.nodezegar
myView.data.text = Wynik.nodedata
myView.posilekRG.text = Wynik.nodeposilek
myView.SP1.text = Wynik.nodehiperglikemia
myView.SP2.text = Wynik.nodestres
myView.SP3.text = Wynik.nodesamopoczucie
//Przycisk kasowania
myView.deleteBtn.setOnClickListener {
val dbMenager = DbMenager(this.context!!)
val selectionArgs = arrayOf(Wynik.nodeID.toString())
dbMenager.delete("ID=?", selectionArgs)
LoadQuery("%")
}
return myView
}
override fun getItem(position: Int): Any {
return ListaWynikowAdapter[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return ListaWynikowAdapter.size
}
}
private fun GoToUpdateFun(Wyniki: FIrebaseVal) {
val intent = Intent(this,AddPomiary::class.java)
intent.putExtra("Id",Wyniki.nodeID)//wpisz Id
intent.putExtra("Stezenie",Wyniki.nodeNumberPicker)
intent.putExtra("Zegar",Wyniki.nodezegar)
intent.putExtra("Data",Wyniki.nodedata)
intent.putExtra("Posilek",Wyniki.nodeposilek)
intent.putExtra("Hiperglikemia",Wyniki.nodehiperglikemia)
intent.putExtra("Stres",Wyniki.nodestres)
intent.putExtra("Samopoczucie",Wyniki.nodesamopoczucie)
startActivity(intent)
}
}
DBMENAGER
package com.example.apkadlapacjenta
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.database.sqlite.SQLiteQueryBuilder
import android.widget.RadioGroup
import android.widget.Toast
class DatebaseMenagerPomiary(context: Context) {
//Database name
var dbName = "Historia Pomiarów"
//table name
var dbTable = "Wyniki"
//kolumny
var colID = "Id"
var colStezenie = "Stezenie"
var colZegar = "Zegar"
var colData = "Data"
var colPosilek = "Posilek"
var colStres = "Stres"
var colSamopoczucie = "Samopoczucie"
var colHiperglikemia = "Hiperglikemia"
//wersja
var dbVersion = 1
//Tworzymy tabele
val sqlCreateTable =
"CREATE TABLE$dbTable($colID INTEGER PRIMARY KEY, $colStezenie TEXT, $colZegar TEXT, $colData TEXT, $colPosilek TEXT, $colStres TEXT,$colSamopoczucie TEXT, $colHiperglikemia TEXT)"
var sqlDB: SQLiteDatabase? = null
init {
val db = DatabaseHelperWyniki(context)
sqlDB = db.writableDatabase
}
inner class DatabaseHelperWyniki : SQLiteOpenHelper {
var context: Context? = null
constructor(context: Context) : super(context, dbName, null, dbVersion) {
this.context = context
}
override fun onCreate(db: SQLiteDatabase?) {
db!!.execSQL(sqlCreateTable)
Toast.makeText(this.context,"baza danych utworzona...",Toast.LENGTH_SHORT).show()
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db!!.execSQL("zamknij tabele jeśli nie istnieje" + dbTable)
}
}
fun insert(values:ContentValues):Long{
val ID = sqlDB!!.insert(dbTable,"",values)
return ID
}
fun Query(projection:Array<String>,selection:String,selectionArgs:Array<String>,sorOrder:String): Cursor {
val qb = SQLiteQueryBuilder()
qb.tables=dbTable
val cursor = qb.query(sqlDB,projection,selection,selectionArgs,null,null,sorOrder)
return cursor
}
fun delete(selection: String,selectionArgs: Array<String>):Int{
val count = sqlDB!!.delete(dbTable,selection,selectionArgs)
return count
}
fun update(values:ContentValues,selection: String,selectionArgs: Array<String>): Int {
val count = sqlDB!!.update(dbTable,values,selection,selectionArgs)
return count
}
}
УЗЕЛ КЛАССА не видно по имени: D
package com.example.apkadlapacjenta
class FIrebaseVal(
nodeID: Int, nodeNumberPicker:String,
nodezegar:String,
nodedata:String,
nodeposilek: String,
nodehiperglikemia: String,
nodestres: String,
nodesamopoczucie: String
) {
var nodeID: Int?= nodeID
var nodeNumberPicker: String? = nodeNumberPicker
var nodezegar:String?=nodezegar
var nodedata:String?=nodedata
var nodeposilek: String? =nodeposilek
var nodehiperglikemia:String?=nodehiperglikemia
var nodestres:String?=nodestres
var nodesamopoczucie:String?=nodesamopoczucie
}
Товарищи, можете ли вы объяснить мне, что не так? Thx