Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
#1

Вывод данных в ListViev из БД - Программирование Android

24.05.2015, 04:07. Просмотров 933. Ответов 27
Метки нет (Все метки)

Доброго времени суток. Диплом близится а на данный момент всё плоховатенько, ой как плоховатенько.



Есть база данных, в ней 4 таблицы("man", "event_type", "meeting", "event"). в таблице "event" хранятся id на данные в предыдущих трёх таблицах. Каким-то образом нужно вывести данные в виде строк, а не цифр(айдишников), которые сей час как раз и выводятся. Как господа?
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
//man
    private static final String DB_TABLE = "man";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "name";
 
    private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_NAME + " text" +
                    ");";
 
    //event type
    private static final String EVENT_TYPE_TABLE = "event_type";
    public static final String EVENT_TYPE_COLUMN_ID = "_id";
    public static final String EVENT_TYPE_COLUMN_NAME = "name";
 
    private static final String EVENT_TYPE_DB_CREATE =
            "create table " + EVENT_TYPE_TABLE + "(" +
                    EVENT_TYPE_COLUMN_ID + " integer primary key autoincrement, " +
                    EVENT_TYPE_COLUMN_NAME + " text" +
                    ");";
 
    //meeting
    private static final String MEETING_TABLE = "meeting";
    public static final String MEETING_COLUMN_ID = "_id";
    public static final String MEETING_COLUMN_NAME = "name";
 
    private static final String MEETING_DB_CREATE =
            "create table " + MEETING_TABLE + "(" +
                    MEETING_COLUMN_ID + " integer primary key autoincrement, " +
                    MEETING_COLUMN_NAME + " text" +
                    ");";
 
        //event
    private static final String EVENT_TABLE = "event";
    public static final String EVENT_COLUMN_ID = "_id";
    public static final String EVENT_COLUMN_MAN = "ManId";
    public static final String EVENT_COLUMN_MEETING = "MeetingId";
    public static final String EVENT_COLUMN_EVENT_TYPE = "EventTypeId";
    public static final String EVENT_COLUMN_VALUE = "Value";
 
    private static final String EVENT_DB_CREATE =
            "create table " + EVENT_TABLE + "(" +
                    EVENT_COLUMN_ID + " integer primary key autoincrement, " +
                    EVENT_COLUMN_MAN + " integer, " +
                    EVENT_COLUMN_MEETING + " integer, " +
                    EVENT_COLUMN_EVENT_TYPE + " integer, " +
                    EVENT_COLUMN_VALUE + " integer" +
                    ");";
 
public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
            db.execSQL(EVENT_TYPE_DB_CREATE);
            db.execSQL(MEETING_DB_CREATE);
            db.execSQL(EVENT_DB_CREATE);
 
//            ContentValues cv = new ContentValues();
//            for (int i = 1; i < 5; i++) {
//                cv.put(COLUMN_NAME, "sometext " + i);
//                db.insert(DB_TABLE, null, cv);
//            }
        }
Добавлено через 2 минуты
Сам onCreate и ниже добавление данных и обновление списка. Как сделать правильный вывод, то есть не цифр из табл. "event", а строк из других таблиц, подцепляя их через айдишники?

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
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
 
        Log.v(TAG, "ОТКРЫВАЕМ ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ" );
 
        // открываем подключение к БД
        db.open();
 
        Log.v(TAG, "ОК- ОТКРЫЛИ" );
 
        // РАСКРЫВАЮЩИЕСЯ СПИСОКИ
        edtMan = (Spinner) findViewById(R.id.ManSpinner);
        edtET = (Spinner) findViewById(R.id.ETSpinner);
        edtMeet = (Spinner) findViewById(R.id.MeetingSpinner);
 
        //СПИНЕРЫ MAN - EVENT TYPE - MEET
        CreatNewSpinnerFU("man", "name", edtMan);
        CreatNewSpinnerFU("event_type", "name", edtET);
        CreatNewSpinnerFU("meeting", "name", edtMeet);
 
        //список на экране
        Cursor curEv = db.getAllData("event");
        startManagingCursor(curEv);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.EVENT_COLUMN_MEETING,
                                       DB.EVENT_COLUMN_MAN,
                                       DB.EVENT_COLUMN_EVENT_TYPE,
                                       DB.EVENT_COLUMN_VALUE};
        int[] to = new int[] { R.id.tvText,
                               R.id.tvText1,
                               R.id.tvText2,
                               R.id.tvText3};
 
 
        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item_ev, curEv, from, to, 0);
        lvDataEvent = (ListView) findViewById(R.id.lvDataEvent);
        lvDataEvent.setAdapter(scAdapter);
 
        // добавляем контекстное меню к списку
        registerForContextMenu(lvDataEvent);
 
        checkboxEvent = (CheckBox) findViewById(R.id.checkBox);
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
70
71
72
btnEvent  = (Button) findViewById(R.id.new_event_in_tab);
        btnEvent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Do something in response to button click
 
 
                boolean checkMan= false;
                boolean checkET = false;
                boolean checkMeet = false;
 
                Log.v(TAG, "ТЫК!" );
 
                //checkMan = !true; checkET = !true; checkMeet = !true;
 
                Log.v(TAG, "РАБОТАЕ СО СПИНЕРАМИ" );
                if (edtMan.getSelectedItem() != null)
                {
                    checkMan = true;
 
                    cur = db.GetCatalogValueByName("man", "_id", "name", edtMan.getSelectedItem().toString());
                    cManID = cur.getInt(cur.getColumnIndex("_id"));
                }
                if (edtET.getSelectedItem() != null)
                {
                    checkET = true;
                    cur = db.GetCatalogValueByName("event_type", "_id", "name", edtET.getSelectedItem().toString());
                    cETID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_EVENT_TYPE, cETID );
                }
                if (edtMeet.getSelectedItem() != null)
                {
                    checkMeet = true;
                    cur = db.GetCatalogValueByName("meeting", "_id", "name", edtMeet.getSelectedItem().toString());
                    cMeetID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_MEETING, cMeetID );
                }
 
                Log.v(TAG, "ПРОВЕРЯЕМ ФЛАГИ НА 'TRUE'. ИМЕЮТСЯ ЛИ ДАННЫЕ В СПИНЕРАХ " );
 
                //Если все значения true, то записываем данные в таблицу "event"
                if(checkMan && checkET && checkMeet){
 
//                    db.addRec("event", "ManId", cManID );
//                    db.addRec("event", "MeetingId", cMeetID );
//                    db.addRec("event", "EventTypeId", cETID );
//                    Log.v(TAG, "ОК" );
                    Log.v(TAG, "РАБОТА С ЧЕКБОКСИКА" );
                    if (checkboxEvent.isChecked()){
//                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 1 );
                        cChB = 1;
                        Log.v(TAG, "ОК---1" );
                    }else {
//                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 0 );
                        cChB = 0;
                        Log.v(TAG, "ОК---0" );
                    }
                    //Добавление данных в таблицу
                    db.addRecFour("event",
                            DB.EVENT_COLUMN_MAN, cManID,
                            DB.EVENT_COLUMN_MEETING, cMeetID,
                            DB.EVENT_COLUMN_EVENT_TYPE, cETID,
                            DB.EVENT_COLUMN_VALUE, cChB);
 
 
                    //cur.requery();
                    cur = db.getAllData("event");
                    scAdapter.changeCursor(cur);
                    scAdapter.notifyDataSetChanged();
                }
 
            }
        });
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2015, 04:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод данных в ListViev из БД (Программирование Android):

ListView в ListViev, приложение вылетает - Программирование Android
мне нужно поместить один ListView в строку другого, вот код: ListView list = (ListView)findViewById(R.id.listView1); ...

Вывод данных из базы данных SQLite - Программирование Android
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных SQLite. Смысл простой: есть одна база, в ней 9 таблиц, от 2 до...

Android - Вывод данных из базы данных - Программирование Android
Всем здравствуйте! Задача не сложная, надо просто знать:-[ Нужно вывести данные из БД SQLite в таблицу. Не надо их ни добавлять, ни...

Где находится ListViev - C++ Builder
в какой группе находится ListViev в борланд 6?

добавление в ListViev строк с таймерами обратного отчёта - C# WPF
Ест приложение. Нужно из ListBox мышкой выбираем строку к примеру &quot;№ 5&quot; нажимаем на кнопку, обработчик добавляет в ListView строку &quot;№5&quot; и...

Как в элементе ListViev строки выделить разным цветом - Visual Basic
Может кто-нить знает как в элементе ListViev строки выделить разным цветом. Или цветом шрифта. Очень надо. Заранее спасибо.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 11:04 #2
Как я понял нужно просто правильный SQL-запрос сделать.
примерный синтаксис объединения с условием:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
имя_таблицы_1.имя_столбца1_таблицы_1, 
имя_таблицы_1.имя_столбца2_таблицы_1, 
имя_таблицы_2.имя_столбца1_таблицы_2, 
имя_таблицы_2.имя_столбца2_таблицы_2, 
имя_таблицы_3.имя_столбца1_таблицы_3, 
имя_таблицы_3.имя_столбца2_таблицы_3
FROM 
имя_таблицы_1, имя_таблицы_2, имя_таблицы_3
WHERE 
имя_таблицы_1.имя_столбца_по_которому_объединяем = имя_таблицы_2.имя_столбца_по_которому_объединяем
AND
имя_таблицы_1.имя_столбца_по_которому_объединяем = имя_таблицы_2.имя_столбца_по_которому_объединяем;
1
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 20:32  [ТС] #3
Mikalai
Да, нужен верный запрос. Это нужно сделать через метод rawQuery? И прилепить(приплюсовать в конец обработки действия кнопки для обновление данных спинера) его в обработку кнопки добавления записи?

Добавлено через 2 минуты
Туго у меня с SQL-запросами, сей час что-нибудь попробую и отпишусь сюда.

Добавлено через 3 часа 56 минут
Mikalai, я так понимаю, что как-то так?
Java
1
2
3
4
5
6
private static final String GET_DATA_FROM_TABLES =
            "select event._id, man.name, meeting.name, event_type.name " +
                    "from meeting, man, event_type, event " +
                    "where event.ManId = man._id " +
                    "and event.MeetingId = meeting._id " +
                    "and event.EventTypeId = event_type._id;";
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 20:42 #4
я бы вот так попробовал:
Java
1
2
3
private static final String GET_DATA_FROM_TABLES =
            "select _id, name, name, name from meeting, man, event_type, event where event.ManId = man._id " +
                    "and event.MeetingId = meeting._id and event.EventTypeId = event_type._id";
но получается "name, name, name". Поменяй название у этих столбцов если есть возможность
0
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 20:44  [ТС] #5
Mikalai, а с ними ничего не случиться? Просто нужно будет БД пересоздать?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 21:06 #6
Пересоздай. если она пустая, то проблем нету
1
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 21:43  [ТС] #7
Mikalai, Чем отличается мой вариант от твоего? В чём фишка?

Добавлено через 6 минут
Mikalai, вопрос. Мне же потом эти данные нужно в ListView передать, что бы эти данные отображались. Для этого мне нужно выбрать другие столбцы сопоставления?

Добавлено через 22 секунды
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 //список на экране
        Cursor curEv = db.getAllData("event");
        startManagingCursor(curEv);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.EVENT_COLUMN_MEETING,
                                       DB.EVENT_COLUMN_MAN,
                                       DB.EVENT_COLUMN_EVENT_TYPE,
                                       DB.EVENT_COLUMN_VALUE};
        int[] to = new int[] { R.id.tvText,
                               R.id.tvText1,
                               R.id.tvText2,
                               R.id.tvText3};
 
 
        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item_ev, curEv, from, to, 0);
        lvDataEvent = (ListView) findViewById(R.id.lvDataEvent);
        lvDataEvent.setAdapter(scAdapter);
Добавлено через 34 секунды
getAllData выглядит так
Java
1
2
3
4
// получить все данные из таблицы
    public Cursor getAllData(String name_Tb) {
        return mDB.query(name_Tb, null, null, null, null, null, null);
    }
Добавлено через 41 секунду
Сей час выводятся просто цифры, а как заменить на строки? Другие столбцы сопоставления?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 21:49 #8
В соседней ветке наверное твой отногрупник)) На каждой странице ViewPager'а должен отображаться свой ListFragment данные для которого берутся из базы
У вас код похожий ))
0
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 22:53  [ТС] #9
Mikalai, вряд ли одногрупник, в своей группе я один на андроид попер. Спасибо, пошёл листать соседнюю ветку.

Добавлено через 25 минут
Mikalai, по сравнению с той темой, у меня выводятся данные, но мне нужно выводить другие, те раньше были просто как на тест.
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 23:06 #10
Заполни курсор(только реши проблему с "name, name, name"):
Java
1
2
3
4
5
6
7
private static final String GET_DATA_FROM_TABLES =
            "select _id, name, name, name from meeting, man, event_type, event where event.ManId = man._id " +
                    "and event.MeetingId = meeting._id and event.EventTypeId = event_type._id";
 
//..........
 
cursor = db.rawQuery(GET_DATA_FROM_TABLES, null);
Ну а дальше прочитай про SimpleCursorAdapter.
0
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 23:25  [ТС] #11
Mikalai, "name, name, name" я уже поменял.

Добавлено через 19 секунд
Спасибо, сей час попробую.

Добавлено через 17 минут
Mikalai, ругается на запрос.
Prolog
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
05-24 23:21:24.762  29936-29936/com.example.kirukato.coolstdreg E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kirukato.coolstdreg/com.example.kirukato.coolstdreg.EventActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
            at android.app.ActivityThread.access$600(ActivityThread.java:150)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:5225)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.kirukato.coolstdreg.EventActivity.onCreate(EventActivity.java:71)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
************at android.app.ActivityThread.access$600(ActivityThread.java:150)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:213)
************at android.app.ActivityThread.main(ActivityThread.java:5225)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:525)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
************at dalvik.system.NativeStart.main(Native Method)
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
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
 
        Log.v(TAG, "ОТКРЫВАЕМ ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ" );
 
        // открываем подключение к БД
        db.open();
 
        Log.v(TAG, "ОК- ОТКРЫЛИ" );
 
        // РАСКРЫВАЮЩИЕСЯ СПИСОКИ
        edtMan = (Spinner) findViewById(R.id.ManSpinner);
        edtET = (Spinner) findViewById(R.id.ETSpinner);
        edtMeet = (Spinner) findViewById(R.id.MeetingSpinner);
 
        //СПИНЕРЫ MAN - EVENT TYPE - MEET
        CreatNewSpinnerFU("man", "m_name", edtMan);
        CreatNewSpinnerFU("event_type", "et_name", edtET);
        CreatNewSpinnerFU("meeting", "meet_name", edtMeet);
 
        //список на экране
        //Cursor curEv = db.getAllData("event");
        //xyz
        Cursor curEv = mDB.rawQuery(GET_DATA_FROM_LIST, null);
        //XYZ
        startManagingCursor(curEv);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.EVENT_COLUMN_MEETING,
                                       DB.EVENT_COLUMN_MAN,
                                       DB.EVENT_COLUMN_EVENT_TYPE,
                                       DB.EVENT_COLUMN_VALUE};
        int[] to = new int[] { R.id.tvText,
                               R.id.tvText1,
                               R.id.tvText2,
                               R.id.tvText3};
 
 
        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item_ev, curEv, from, to, 0);
        lvDataEvent = (ListView) findViewById(R.id.lvDataEvent);
        lvDataEvent.setAdapter(scAdapter);
 
        // добавляем контекстное меню к списку
        registerForContextMenu(lvDataEvent);
Cursor curEv = mDB.rawQuery(GET_DATA_FROM_LIST, null); на неё ругается.

строка запроса:
Java
1
2
3
    private static final String GET_DATA_FROM_LIST =
            "select _id, m_name, et_name, meet_name from meeting, man, event_type, event where event.ManId = man._id " +
                    "and event.MeetingId = meeting._id and event.EventTypeId = event_type._id";
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.05.2015, 23:31 #12
А mDB точно не нул? покажи весь класс полностью и особенно строку EventActivity.java:71 укажи
0
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
24.05.2015, 23:43  [ТС] #13
EventActivity.java:71 - это
Cursor curEv = mDB.rawQuery(GET_DATA_FROM_LIST, null);


весь класс EventActivity.java
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
package com.example.kirukato.coolstdreg;
 
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Loader;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
 
import java.util.ArrayList;
import java.util.List;
 
 
public class EventActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
 
    private static final String TAG = "EVENT__ACTIVITY";
    private static final String GET_DATA_FROM_LIST =
            "select _id, m_name, et_name, meet_name from meeting, man, event_type, event where event.ManId = man._id " +
                    "and event.MeetingId = meeting._id and event.EventTypeId = event_type._id";
 
    DB db = new DB(this);
    SimpleCursorAdapter scAdapter;
    private SQLiteDatabase mDB;
    Spinner edtMan, edtET, edtMeet;
 
    Cursor cur, LvCur;
    int cManID = 0, cMeetID = 0, cETID = 0, cChB=0;
 
    CheckBox checkboxEvent;
    Button btnEvent, btnLog;
 
    ListView lvDataEvent;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
 
        Log.v(TAG, "ОТКРЫВАЕМ ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ" );
 
        // открываем подключение к БД
        db.open();
 
        Log.v(TAG, "ОК- ОТКРЫЛИ" );
 
        // РАСКРЫВАЮЩИЕСЯ СПИСОКИ
        edtMan = (Spinner) findViewById(R.id.ManSpinner);
        edtET = (Spinner) findViewById(R.id.ETSpinner);
        edtMeet = (Spinner) findViewById(R.id.MeetingSpinner);
 
        //СПИНЕРЫ MAN - EVENT TYPE - MEET
        CreatNewSpinnerFU("man", "m_name", edtMan);
        CreatNewSpinnerFU("event_type", "et_name", edtET);
        CreatNewSpinnerFU("meeting", "meet_name", edtMeet);
 
        //список на экране
        //Cursor curEv = db.getAllData("event");
        //xyz
        Cursor curEv = mDB.rawQuery(GET_DATA_FROM_LIST, null);
        //XYZ
        startManagingCursor(curEv);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.EVENT_COLUMN_MEETING,
                                       DB.EVENT_COLUMN_MAN,
                                       DB.EVENT_COLUMN_EVENT_TYPE,
                                       DB.EVENT_COLUMN_VALUE};
        int[] to = new int[] { R.id.tvText,
                               R.id.tvText1,
                               R.id.tvText2,
                               R.id.tvText3};
 
 
        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item_ev, curEv, from, to, 0);
        lvDataEvent = (ListView) findViewById(R.id.lvDataEvent);
        lvDataEvent.setAdapter(scAdapter);
 
        // добавляем контекстное меню к списку
        registerForContextMenu(lvDataEvent);
 
        checkboxEvent = (CheckBox) findViewById(R.id.checkBox);
 
        Log.v(TAG, "ЖДЁМ 'ТЫК' КНОПКИ" );
 
        btnLog  = (Button) findViewById(R.id.log_log_log);
        btnLog.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
 
                Log.d(TAG, "--- Rows in event: ---");
                // делаем запрос всех данных из таблицы , получаем Cursor
                //Cursor c = db.query("event", null, null, null, null, null, null);
                Cursor c = db.getDataForEvent("event");
 
                if (c.moveToFirst()) {
                    int idColID = 0;//c.getColumnIndex(DB.EVENT_COLUMN_ID);
                    int idColMAN = 1;//c.getColumnIndex(DB.COLUMN_NAME); - надо сделать уникальные имена таблиц, иначе метод не работает
                    int idColMEETING = 2;//c.getColumnIndex(DB.MEETING_COLUMN_NAME); - надо сделать уникальные имена таблиц, иначе метод не работает
 
                    int idColET = 3;//c.getColumnIndex(DB.EVENT_TYPE_COLUMN_NAME); - надо сделать уникальные имена таблиц, иначе метод не работает
 
 
                    //int idColVALUE = c.getColumnIndex(DB.EVENT_COLUMN_VALUE);
 
                    do {
                        // получаем значения по номерам столбцов и пишем все в лог
                        Log.d(TAG,
                                "ID = " + c.getInt(idColID) +
                                        ", MAN = " + c.getString(idColMAN) +
                                        ", MEETING = " + c.getString(idColMEETING) +
                                        ", EVENT TYPE = " + c.getString(idColET) +
                                        ", VALUE = " /*+ c.getInt(idColVALUE)*/);
                        // переход на следующую строку
                        // а если следующей нет (текущая - последняя), то false - выходим из цикла
                    } while (c.moveToNext());
                } else {
                    Log.d(TAG, "0 rows");
                }
            }
        });
 
 
//        btnLog.setOnClickListener(new View.OnClickListener() {
//            public void onClick(View v) {
//
//                Log.d(TAG, "--- Rows in event: ---");
//                // делаем запрос всех данных из таблицы , получаем Cursor
//                //Cursor c = db.query("event", null, null, null, null, null, null);
//                Cursor c = db.getAllData("event");
//
//                if (c.moveToFirst()) {
//                    int idColID = c.getColumnIndex(DB.EVENT_COLUMN_ID);
//                    int idColMAN = c.getColumnIndex(DB.EVENT_COLUMN_MAN);
//                    int idColMEETING = c.getColumnIndex(DB.EVENT_COLUMN_MEETING);
//                    int idColET = c.getColumnIndex(DB.EVENT_COLUMN_EVENT_TYPE);
//                    int idColVALUE = c.getColumnIndex(DB.EVENT_COLUMN_VALUE);
//
//                    do {
//                        // получаем значения по номерам столбцов и пишем все в лог
//                        Log.d(TAG,
//                                "ID = " + c.getInt(idColID) +
//                                        ", MAN = " + c.getInt(idColMAN) +
//                                        ", MEETING = " + c.getInt(idColMEETING) +
//                                        ", EVENT TYPE = " + c.getInt(idColET) +
//                                        ", VALUE = " + c.getInt(idColVALUE));
//                        // переход на следующую строку
//                        // а если следующей нет (текущая - последняя), то false - выходим из цикла
//                    } while (c.moveToNext());
//                } else {
//                    Log.d(TAG, "0 rows");
//                }
//                    }
//
//
//
//
//        });
 
        btnEvent  = (Button) findViewById(R.id.new_event_in_tab);
        btnEvent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Do something in response to button click
 
 
                boolean checkMan= false;
                boolean checkET = false;
                boolean checkMeet = false;
 
                Log.v(TAG, "ТЫК!" );
 
                //checkMan = !true; checkET = !true; checkMeet = !true;
 
                Log.v(TAG, "РАБОТАЕ СО СПИНЕРАМИ" );
                if (edtMan.getSelectedItem() != null)
                {
                    checkMan = true;
 
                    cur = db.GetCatalogValueByName("man", "_id", "m_name", edtMan.getSelectedItem().toString());
                    cManID = cur.getInt(cur.getColumnIndex("_id"));
                }
                if (edtET.getSelectedItem() != null)
                {
                    checkET = true;
                    cur = db.GetCatalogValueByName("event_type", "_id", "et_name", edtET.getSelectedItem().toString());
                    cETID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_EVENT_TYPE, cETID );
                }
                if (edtMeet.getSelectedItem() != null)
                {
                    checkMeet = true;
                    cur = db.GetCatalogValueByName("meeting", "_id", "meet_name", edtMeet.getSelectedItem().toString());
                    cMeetID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_MEETING, cMeetID );
                }
 
                Log.v(TAG, "ПРОВЕРЯЕМ ФЛАГИ НА 'TRUE'. ИМЕЮТСЯ ЛИ ДАННЫЕ В СПИНЕРАХ " );
 
                //Если все значения true, то записываем данные в таблицу "event"
                if(checkMan && checkET && checkMeet){
 
//                    db.addRec("event", "ManId", cManID );
//                    db.addRec("event", "MeetingId", cMeetID );
//                    db.addRec("event", "EventTypeId", cETID );
//                    Log.v(TAG, "ОК" );
                    Log.v(TAG, "РАБОТА С ЧЕКБОКСИКА" );
                    if (checkboxEvent.isChecked()){
//                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 1 );
                        cChB = 1;
                        Log.v(TAG, "ОК---1" );
                    }else {
//                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 0 );
                        cChB = 0;
                        Log.v(TAG, "ОК---0" );
                    }
                    //Добавление данных в таблицу
                    db.addRecFour("event",
                            DB.EVENT_COLUMN_MAN, cManID,
                            DB.EVENT_COLUMN_MEETING, cMeetID,
                            DB.EVENT_COLUMN_EVENT_TYPE, cETID,
                            DB.EVENT_COLUMN_VALUE, cChB);
 
 
                    //cur.requery();
                    //xyz
                    //cur = db.getAllData("event");
 
                    cur = mDB.rawQuery(GET_DATA_FROM_LIST, null);
                    //XYZ
 
                    //cur = db.rawQuery();
 
 
                    scAdapter.changeCursor(cur);
                    scAdapter.notifyDataSetChanged();
                }
 
            }
        });
 
 
 
 
 
    }// КОНЕЦ onCreate
 
//    public void onPause()
//    {
//        super.onPause();
//        Log.d("on pause", " / ");
//        db.close();
//    }
 
    protected void onResume() {
        super.onResume();
        db.open();
        Log.d(TAG, "EventActivity: onResume()");
    }
 
    //СОЗДАНИЕ SPINNER
    public void CreatNewSpinnerFU(String name_table, String name_column, Spinner qwerty) {
        List ListArray = new ArrayList();
        Cursor Post = db.GetCatalogByName(name_table);
        Post.moveToFirst();
 
        if (Post != null && Post.getCount() > 0) {
            do {
                ListArray.add(Post.getString(Post.getColumnIndex(name_column)));
            } while (Post.moveToNext());
 
            ArrayAdapter dataAdapterPost = new ArrayAdapter(this, android.R.layout.simple_spinner_item, ListArray);
            dataAdapterPost.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            qwerty.setAdapter(dataAdapterPost);
        }
        Post.close();
    }
 
    // обработка нажатия кнопки
//    public void onButtonClick(View view) {
//        String name = etName.getText().toString();
//        // добавляем запись
//        db.addRec("man", DB.COLUMN_NAME, name );
//        // обновляем курсор
//        cursor.requery();
//    }
 
    public void onItemSelected(AdapterView<?> parent, View view,
                               int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }
 
 
        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_event, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return null;
    }
 
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
 
    }
 
    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
 
    }
}
Добавлено через 1 минуту
прошу прощения за мой "быдлокод".
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
25.05.2015, 00:00 #14
Как я и говорил у тебя mDB = null
по идеи твой класс DB должен расширять класс SQLiteOpenHelper
тогда нужно дописать mDB = db.getWritableDatabase();
если не заработает скинь код класса DB.java
И не забывай освобождать ресурсы - db.close(); - у тебя ща эти строки закоментированы
0
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
25.05.2015, 00:04  [ТС] #15
Mikalai, вопрос, куда "mDB = db.getWritableDatabase();" дописать?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2015, 00:04
Привет! Вот еще темы с ответами:

ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хра-нилище данных в файле). - C++
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и вывод данных из этого файла на экран...

Реализовать ввод данных, вывод данных, поиск по номеру квартиры и возрасту - Turbo Pascal
ввод данных, вывод данных, поиск по номеру квартиры и возрасту. Запись состоит из номера квартиры (тип integer), фамилии (тип string),...

Как установить LCID. Вывод данных из баз данных в динамические страницы - C# ASP.NET
Я хостюсь на зарубежном хостинге. И отсюда все проблемы (но есть и свои плюсы). У меня есть база SQL Server 2000. При динамическом...

Запрос к базе данных через форму и вывод данных на страничке - PHP БД
Всем привет. Очень нужна ваша помощь, вы моя последняя надежда. У меня стоит одна форма и ввожу имя человека который проходит тест, потом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2015, 00:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru