2 / 2 / 0
Регистрация: 20.10.2019
Сообщений: 58
1

Вылетает SimpleCursorAdapter

02.01.2020, 19:58. Показов 833. Ответов 0

Author24 — интернет-сервис помощи студентам
При запуске Activity с БД вылетает из за SimpleCursorAdapter.
Логи:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Process: com.arseniy.schoolhelper, PID: 11341
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arseniy.schoolhelper/com.arseniy.schoolhelper.JournalSubjectAdd}: java.lang.IllegalArgumentException: column '_id' does not exist
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
     Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
        at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
        at android.widget.CursorAdapter.init(CursorAdapter.java:180)
        at android.widget.CursorAdapter.<init>(CursorAdapter.java:157)
        at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:96)
        at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:104)
        at com.arseniy.schoolhelper.JournalSubjectAdd.onCreate(JournalSubjectAdd.java:53)
        at android.app.Activity.performCreate(Activity.java:6662)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
Вот сам код (Activity):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import androidx.appcompat.app.AppCompatActivity;
 
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class JournalSubjectAdd extends AppCompatActivity {
    ArrayList<String> subjects = new ArrayList<>();
    ArrayAdapter<String> adapter;
    ListView subject;
    String[] subjectFromDB; String subjectText;
 
    Button add;
    Button remove;
    EditText nameSubject;
 
    DatabaseHelper databaseHelper;
    SQLiteDatabase database;
    Cursor cursor;
    SimpleCursorAdapter cursorAdapter;
 
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_journal_subject_add);
        setTitle("Предметы");
        subject = (ListView)findViewById(R.id.subjectList);
        add = (Button)findViewById(R.id.subjectAdd);
        remove = (Button)findViewById(R.id.subjectRemove);
        nameSubject = (EditText)findViewById(R.id.nameSubject);
 
        databaseHelper = new DatabaseHelper(getApplicationContext());
 
        //открываем подключение
        database = databaseHelper.getReadableDatabase();
        //получение данных из БД
        cursor =  database.rawQuery("SELECT * FROM "+ DatabaseHelper.TABLE, null);
        cursor.moveToFirst();
        //определяем, какие столбцы из курсора будут выводиться в ListView
        subjectFromDB = new String[] {DatabaseHelper.COLUMN_SUB};
        cursorAdapter = new SimpleCursorAdapter
                (this, android.R.layout.simple_list_item_1, cursor, subjectFromDB, new int[]{android.R.id.text1}, 0);
        subject.setAdapter(cursorAdapter);
    }
 
    @Override
    public void onResume() {
        super.onResume();
 
    }
 
    @Override
    public void onDestroy(){
        super.onDestroy();
        // Закрываем подключение и курсор
        database.close();
        cursor.close();
    }
}
И класс DatabaseHelper:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "Journal.db"; // название бд
    private static final int VER = 1; // версия базы данных
    static final String TABLE = "subject"; // название таблицы в бд
    // названия столбцов
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_SUB = "sub";
 
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VER);
    }
 
    //создание БД
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE subject (" + COLUMN_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_SUB + " TEXT);");
        //добавление начальных данных
        db.execSQL("INSERT INTO " + TABLE + " (" + COLUMN_SUB + ") VALUES ('Математика');");
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,  int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE);
        onCreate(db);
    }
}
Из - за чего вылетает приложение и где сама ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2020, 19:58
Ответы с готовыми решениями:

SimpleCursorAdapter
Почему то ругаетсяв строке new SimpleCursorAdapter()... Что не так делаю? Cursor cursor =...

Фильтрация в кастомном SimpleCursorAdapter
Здравствуйте. вот Активити public class MainActivity extends AppCompatActivity { ...

SimpleCursorAdapter не хочет работать
Добрый день. Вобщем такая ситация. Нажимаю на MainActivity кнопку и по интенту грузится вторая...

Получение данных с SimpleCursorAdapter
Скопировал себе в приложение пример из библиотеки шерлок, с табами. оно работает хорошо, но мне...

0
02.01.2020, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2020, 19:58
Помогаю со студенческими работами здесь

Прикрутить RadioGroup к ListView(SimpleCursorAdapter)
Не могу понять как реализовать одиночный выбор из списка: Сейчас выводит список компаний, где я...

Каков новый аналог устаревшего SimpleCursorAdapter?
SimpleCursorAdapter устарел уже(deprecated) что лучше использовать вместо него какой есть более...

ViewPager, Fragment и SimpleCursorAdapter, обновить соседнюю страницу
Есть активити с ViewPager, в который подгружается фрагмент, состоящий из ListView. ListView (с...

Вывод из базы данных в ListView через SimpleCursorAdapter
Доброе время суток. Пишу программу под Андроид в среде Android Studio и возникла проблема с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru