Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
#1

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

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

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



http://www.cyberforum.ru/android-dev/thread669651.html
Есть база данных, в ней 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):

Вывод данных из базы данных SQLite
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных...

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

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

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

Как в элементе ListViev строки выделить разным цветом
Может кто-нить знает как в элементе ListViev строки выделить разным цветом. Или...

27
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
25.05.2015, 01:41  [ТС] #21
Стоп, а как иначе создавать таблицы? Вот как там у меня.
Java
1
2
3
4
5
6
7
        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);
 
       }
Добавлено через 1 минуту
У меня там все 4 таблицы, просто у первой, которая "man" название дурацкое "DB_CREATE"

Добавлено через 8 минут
заработало, не вылетает. Хорошо. Но проблема та же. Картинка

на месте этих цифорок, нужны строки, что видны в спинерах.

Добавлено через 11 минут
Mikalai, спасибо тебе большое. Спокойной ночи.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
25.05.2015, 07:15 #22
SQL
1
"SELECT * FROM meeting, man, event_type, event "
Ктож так таблицы смотрит, JOIN нужен.
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
25.05.2015, 11:08 #23
Naomis, показывает циферки потому что не правильно заполняешь массив from
вот так у тебя:

Java
1
2
3
4
String[] from = new String[] { DB.EVENT_COLUMN_MEETING,
                                       DB.EVENT_COLUMN_MAN,
                                       DB.EVENT_COLUMN_EVENT_TYPE,
                                       DB.EVENT_COLUMN_VALUE};
А нужно примерно так:

Java
1
2
3
4
String[] from = new String[] { DB.MEETING_COLUMN_NAME,
                                       DB.COLUMN_NAME,
                                       DB.EVENT_TYPE_COLUMN_NAME,
                                       DB.EVENT_COLUMN_VALUE};
Rube, ну так джоин же описан дальше. Это же не вся строка.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
25.05.2015, 11:17 #24
Цитата Сообщение от Mikalai Посмотреть сообщение
ну так джоин же описан дальше
Что значит описан? Если нужно выбрать из других таблиц имена по их id, то и связывать таблицы нужно в запросе, т.е.
SQL
1
SELECT t2.name FROM t1 JOIN t2 ON t1.id = t2.id
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
25.05.2015, 11:33 #25
Rube, может и так. Но вот для примера 100% рабочий запрос без джоина, из 4х таблиц выводит информацию:
Java
1
2
3
4
5
String sqlQuery = "SELECT value, currency, currency_id, date, type, kind_credit, kind_debit " +
                "FROM table_currency, table_budget, table_kind_credit, table_kind_debit " +
                "WHERE table_budget.currency_id = table_currency._id AND " +
                "table_budget.kind_credit_id = table_kind_credit._id AND " +
                "table_budget.kind_debit_id = table_kind_debit._id ORDER BY date";
сам писал когда-то. всё работает как нужно.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
25.05.2015, 14:00 #26
Цитата Сообщение от Mikalai Посмотреть сообщение
всё работает как нужно
В таком запросе могут быть подводные камни в виде отсутствия в одной таблице сравниваемого значения имхо, да и бд на то она и бд, чтобы использовать ее правильно.
0
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
25.05.2015, 17:47  [ТС] #27
Mikalai, Mikalai, то есть такой SQL-запрос не подходит? Нужно что-то поменять?
Java
1
2
3
4
private static final String GET_DATA_FROM_LIST =
            "SELECT * FROM meeting, man, event_type, event " +
                    "WHERE event.ManId = man._id AND event.MeetingId = meeting._id AND " +
                    "event.EventTypeId = event_type._id";
Всё поправил. Сей час работает вроде всё как нужно, но один момент(картинка). но там остались цифры, фишка в том, что они там так и записаны, так как это данные от чекбоксика. Есть возможность заменить 0\1 на "свершилось" или что-то в этом роде?
0
Mikalai
262 / 238 / 95
Регистрация: 11.01.2015
Сообщений: 666
25.05.2015, 18:23 #28
Naomis, SQL-запрос рабочий, по крайней мере. Заметить циферки словами можно, например, сделав свой адаптер расширяющий SimpleCursorAdapter

Rube, написал приложение для проверки упадёт ли оно если будут не совпадения в 2х таблицах. Не упало. Просто строки с не совпадающими значениями не выводятся как и при использовании джоина.
0
25.05.2015, 18:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2015, 18:23
Привет! Вот еще темы с решениями:

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

Реализовать ввод данных, вывод данных, поиск по номеру квартиры и возрасту
ввод данных, вывод данных, поиск по номеру квартиры и возрасту. Запись состоит...

Как установить LCID. Вывод данных из баз данных в динамические страницы
Я хостюсь на зарубежном хостинге. И отсюда все проблемы (но есть и свои плюсы)....

Подключение к базе данных и вывод данных в DataGridView завершается с ошибкой
Подскажите что не так с кодом выкидывает разные ошибки Сейчас пишет:Error:...


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

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

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