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

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

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

SQLite and ListView. Ввод и вывод данных - Android

12.04.2015, 21:15. Просмотров 3399. Ответов 53
Метки нет (Все метки)

Здравствуйте. Пишу программу(кто бы мог подумать). Есть подозрения, что данные в БД вбиваются не правильно или как раз выводятся неправильно. Этого ни как всё не пойму.Собственно код:
Вывод данных в лог с помощью кнопки из таблицы, что в БД.
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
 btnEvent  = (Button) findViewById(R.id.log_log_log);
        btnEvent.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");
                }
                    }
        });
Лог после вывода:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
D/EVENT__ACTIVITY﹕ --- Rows in event: ---
D/EVENT__ACTIVITY﹕ ID = 1, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 2, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 3, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 4, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 5, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 6, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 7, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 8, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 9, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 10, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 11, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 12, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 13, MAN = 2, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 14, MAN = 0, MEETING = 2, EVENT TYPE = 0, VALUE = 0
И так далее.

Фишка в том, что добавляются 4 интовых значения, а при выводе получается не одна строка, а четыре и некой лесенкой, можно увидеть:
11000
20100
30010
40001
Как-то так. Запихнул это на вывод в ListView, но там тоже ни чего хорошего вывод цифры происходит через каждые три строчки.

Добавление в данных в таблицу
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
 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= !true,
                        checkET = !true,
                        checkMeet = !true;
 
                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 != false & checkET != false & checkMeet != false){
                    db.addRec("event", "ManId", cManID );
                    db.addRec("event", "MeetingId", cMeetID );
                    db.addRec("event", "EventTypeId", cETID );
                    Log.v(TAG, "ОК" );
 
                    Log.v(TAG, "ЗАПИСЬ В ТАБЛИЦУ ЧЕКБОКСИКА" );
                    if (checkboxEvent.isChecked() == true) {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 1 );
                        Log.v(TAG, "ОК---1" );
 
                    }else {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 0 );
                        Log.v(TAG, "ОК---0" );
                    }
                }
            }
        });
В заранее спасибо за вашу помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
20.04.2015, 07:53     SQLite and ListView. Ввод и вывод данных #41
Я бы привел пример если бы представлял что такое "man", "event_type", "meeting", и что программа делает. Объясни, желательно на примере попроще.
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
29.04.2015, 22:35  [ТС]     SQLite and ListView. Ввод и вывод данных #42
Всем доброго времени суток. Пропал на немного.

Rube
Нужно сделать как-то так:
Вывод данных из трёх таблиц(БД) с помощью четвёртой. Фишка такова. в четвёртой таблице "event" лежат id на данные в других таблицах ("man", "event_type", "meeting"), которые заполнены строками(тип string я имею ввиду). Так вот берём данные из "event" (то есть id), сравниваем с 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
dbHelper.Open();
curLsitElem = dbHelper.FetchAllList(FormattingDateDMY(day + "." + month + "." + year));
dbHelper.Close();
 
int size = 0;
int i = 0;
 
ArrayList<Map<String, Object>> document = null;
curLsitElem.moveToFirst();
size = curLsitElem.getCount();
 
document = new ArrayList<Map<String, Object>>();
HashMap<String, Object> map;
for (int i1 = 0; i1 < size; i1++)
{
 dbHelper.Open();
 
 map = new HashMap<String, Object>();
 map.put("ID", curLsitElem.getString(curLsitElem.getColumnIndex("ID")));
 map.put("Address", curLsitElem.getString(curLsitElem.getColumnIndex("Address")));
 dbHelper.Close();
 document.add(map);
 
 curLsitElem.moveToNext();
}
curLsitElem.close();
 
 
lisview = (ListView) findViewById(android.R.id.list);
adapter1 = new SimpleAdapter(this, document, R.layout.activity_row,
     new String[] {"ID", "Address"}, 
     new int[] {R.id.lblVisitID, R.id.lblAddress});
lisview.setAdapter(adapter1);
lisview.setOnItemClickListener(itemListener);
lisview.setOnItemLongClickListener(itemLongListener);
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
30.04.2015, 09:15     SQLite and ListView. Ввод и вывод данных #43
Это код юноши, но не мужчины, мы будем делать правильно и использовать CursorAdapter.
Сперва тебе надо в классе БД создать метод который возвратит курсор с данными.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Cursor cursor = dbHelper.fetchAllCountries();
 
// Поля БД с данными для вставки
String[] columns = new String[] {
    CountriesDbAdapter.KEY_CODE,
    CountriesDbAdapter.KEY_NAME };
 
// id вьюшек из итема.xml
int[] to = new int[] { 
    R.id.code,
    R.id.name };
 
// создаем адаптер с параметрами
dataAdapter = new SimpleCursorAdapter(this, R.layout.country_info, 
    cursor, columns, to, 0);
    
// находим ListView и сетим в него адаптер
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(dataAdapter);
тут есть все что надо.
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
30.04.2015, 14:46  [ТС]     SQLite and ListView. Ввод и вывод данных #44
Rube, спасибо, но чем не хорош тот код?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
30.04.2015, 15:08     SQLite and ListView. Ввод и вывод данных #45
Тем, что надо напрямую работать с БД.
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
30.04.2015, 17:13  [ТС]     SQLite and ListView. Ввод и вывод данных #46
Появился второстепенный вопрос. Попытался собрать проект на другом комп., но программа ругается и не даёт даже простецки собрать проект. Говорит подобное: gradle project sync failed basic functionality will not work properly

В гугл лез. Здесь вроде как дельные штуки говорят, но попробовал и либо неправильно что-то сделал, либо не до конца, либо не помогло(я слабоват в англ. яз.).
Так же ругается на что-то такое:
Prolog
1
2
Error:(16) A problem occurred evaluating project ':app'.
> Could not find method runProguard() for arguments [false] on BuildType_Decorated{name=release, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, applicationIdSuffix=null, versionNameSuffix=null, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}}.
Указывая на нечто такое:
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
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 21
    buildToolsVersion "20.0.0"
 
    defaultConfig {
        applicationId "com.example.kirukato.coolstdreg"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
Проект чистил и пересобирал.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
30.04.2015, 20:08     SQLite and ListView. Ввод и вывод данных #47
Я в студио только начинаю, так что особо советов не дам, проект синхронизировал?
Что за код такой? Это видимо нативный андроид.

Добавлено через 47 секунд
А вообще если тема закрыта создай новую, но мне кажется причина на поверхности.
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
30.04.2015, 21:10  [ТС]     SQLite and ListView. Ввод и вывод данных #48
Rube, нет, тема пока не закрыта, ещё не сделан правильный вывод данных.

Добавлено через 2 минуты
В смысле синхронизировал? Какой-какой андроид?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
30.04.2015, 21:18     SQLite and ListView. Ввод и вывод данных #49
Там в студии кнопка вроде есть такая, обновить типа (я в студии если чо 2 раза только был).
Ну что за код ты привел? Похож на манифест, только студийный какойто, типа градл там есть) Я еще сам не разобрался. Нативный типа это вообще не для юзеров, а для кодеров гугловских).
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
02.05.2015, 19:58  [ТС]     SQLite and ListView. Ввод и вывод данных #50
Я так понимаю в БД я создаю метод для курсора, который будет возвращать данные для листвивера. А в метоле выборка данных, выборка из 4-й таблицы "event" id-шников на другие три таблицы, сравнение с ними и забор из 3 других таблиц(не event) и впихивание в листвивер.

Возможно коряво пишу, но пишу как понимаю...
Leo Naphta
0 / 0 / 0
Регистрация: 02.05.2015
Сообщений: 1
02.05.2015, 23:21     SQLite and ListView. Ввод и вывод данных #51
Пытаюсь запустить проект с этим кодом на Android Studio, получаю
Error: (16, 0) Gradle DSL method not found: 'runProguard()'
Possible causes:<ul><li>The project 'CoolStdReg' may be using a version of Gradle that does not contain the method.
<a href="open.wrapper.file">Open Gradle wrapper file</a></li><li>The build file may be missing a Gradle plugin.
<a href="apply.gradle.plugin">Apply Gradle plugin</a></li>

Что с этим делать, не подскажете?

Добавлено через 17 минут
Апд. Уже неактуально.
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
03.05.2015, 21:57  [ТС]     SQLite and ListView. Ввод и вывод данных #52
Rube, не понимаю, как сделать правильную выборку в БД и пропихнуть это в листвивер.

Добавлено через 18 часов 24 минуты
Как я понимаю, то создаю метод

Java
1
2
3
4
5
6
7
8
9
10
//данные для 4 таблицы(евент)
    public Cursor getDataForEvent(String name_Tb) {
        Cursor crEvent = getAllData(EVENT_TABLE);
        Cursor crEType = getAllData(EVENT_TYPE_TABLE);
        Cursor crMeet = getAllData(MEETING_TABLE);
        Cursor crMan = getAllData(DB_TABLE);
        //дальше что-то явно нужно делать.
 
        return null;
    }
Пока выглядит так. забираю данны из таблиц в курсоры с помощью функции getAllData()
Java
1
2
3
4
// получить все данные из таблицы
    public Cursor getAllData(String name_Tb) {
        return mDB.query(name_Tb, null, null, null, null, null, null);
    }
А дальше их нужно обрабатывать. Но я не знаю как это сделать. Нужно собрать данные, что в трёх таблицах("man", "event_type", "meeting"), которые соответствуют данным из 4-й таблицы "event"(в ней лежат id нужных данных из других таблиц). И потом всё передаётся в ЛистВивер? Не осознал как отсюда почерпнуть нужную информацию, к тому же там идёт работа с одной таблице, а я пытаюсь работать с несколькими(всего их 4). Или это без разницы?

В заранее спасибо.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
04.05.2015, 20:17     SQLite and ListView. Ввод и вывод данных #53
Цитата Сообщение от Naomis Посмотреть сообщение
Как я понимаю, то создаю метод
Ну мягко говоря, это неправильный код. Cursor дожен быть один, ты ж его возвращаешь. Вообще надо бы тебе поизучать пару дней sql-запросы, раз собираешься работать с БД. Яб составил запрос, знай что надо вытащить тебе. Типа
T-SQL
1
2
3
String query= "SELECT * FROM event WHERE id = 1"
Cursor cursor = database.rawQuery(query, null);
return cursor;
Обрабатывать ничего не надо, т.к. сам курсор сетится в адаптер.
Объясни (попроще желательно) на пальцах, что находится в таблицах и что надо вытащить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2015, 20:47     SQLite and ListView. Ввод и вывод данных
Еще ссылки по теме:

ListView ячейки, получить Id элемента из SQLite Android
Идентификация ListView + SQLite Android
Вывод из базы данных в ListView через SimpleCursorAdapter Android
Android Картинка из SQLite в ListView
Загрузка данных из SQLite для каждого пункта ListView Android

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

Или воспользуйтесь поиском по форуму:
Naomis
6 / 6 / 1
Регистрация: 11.03.2015
Сообщений: 210
Завершенные тесты: 1
04.05.2015, 20:47  [ТС]     SQLite and ListView. Ввод и вывод данных #54
Rube, вот мой проект, если что. В БД 4 таблицы. Первые три имеют в себе два столбца: id и name. name - является string'ом. А в 4-й таблице при заполнении записываются id на данные из первых трёх таблиц. Нужно выводить данные в виде строк, чтобы это можно было читабельно, а не последовательность из цифр. Как-то так. Так ясно?

Добавлено через 2 минуты
Где культурно и доступно можно почитать на тему sql-запросов? И это сильно отличается от SQLite?
Yandex
Объявления
04.05.2015, 20:47     SQLite and ListView. Ввод и вывод данных
Ответ Создать тему
Опции темы

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