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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Rilina
4 / 4 / 0
Регистрация: 16.11.2013
Сообщений: 33
#1

Вывод из базы данных в ListView через SimpleCursorAdapter - Android

15.05.2015, 21:06. Просмотров 3113. Ответов 26
Метки нет (Все метки)

Доброе время суток.
Пишу программу под Андроид в среде Android Studio и возникла проблема с выводом данных в listview через SimpleCursorAdapter.
Суть: программа сохраняет результаты проверки в БД, затем при переходе в окно "Результаты" отображает их через 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
59
60
61
62
63
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.SimpleCursorAdapter;
import android.widget.ListView;
 
 
public class Results extends ActionBarActivity {
     DatabaseHelper dbHelper;
    SQLiteDatabase sdb;
    SimpleCursorAdapter scAdapter;
    ListView list;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.results);
        dbHelper = new DatabaseHelper(this, "mydatabase.db", null, 1);
        sdb = dbHelper.getWritableDatabase();
 
        Cursor cursor = sdb.query("rezults", new String[]{dbHelper.NAME_COLUMN, dbHelper.MARK_COLUMN},
                null, null,
                null, null, null);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { dbHelper.NAME_COLUMN, dbHelper.MARK_COLUMN };
        int[] to = new int[] { R.id.tvName, R.id.tvMark };
 
        // создаем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to,0);
        list = (ListView) findViewById(R.id.listView);
        list.setAdapter(scAdapter);
 
    }
 
    @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_results, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
 
        int id = item.getItemId();
 
 
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
}
Класс базы данных:
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
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.database.Cursor;
 
public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns {
 
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final String DATABASE_TABLE = "rezults";
 
    public static final String NAME_COLUMN = "name";
    public static final String MARK_COLUMN = "marks";
 
    private static final String DATABASE_CREATE_SCRIPT = "create table "
            + DATABASE_TABLE + " (" + BaseColumns._ID
            + " integer primary key autoincrement, " + NAME_COLUMN
            + " text not null, " + MARK_COLUMN + " integer);";
 
    public DatabaseHelper(Context context, String name, CursorFactory factory,
                          int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
        // TODO Auto-generated constructor stub
    }
 
    public DatabaseHelper(Context context, String name, CursorFactory factory,
                          int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
 
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(DATABASE_CREATE_SCRIPT);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        // Запишем в журнал
     //   Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);
 
        // Удаляем старую таблицу и создаём новую
        db.execSQL("DROP TABLE IF IT EXIST " + DATABASE_TABLE);
        // Создаём новую таблицу
        onCreate(db);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2015, 21:06     Вывод из базы данных в ListView через SimpleCursorAdapter
Посмотрите здесь:

Прикрутить RadioGroup к ListView(SimpleCursorAdapter) Android
Android Вывод из базы данных
Вывод данных из базы данных SQLite Android
Получение данных с SimpleCursorAdapter Android
Вывод данных в список Listview Android
Как правильно построить адаптер для показа данных из базы в ListView Android
SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rilina
4 / 4 / 0
Регистрация: 16.11.2013
Сообщений: 33
31.05.2015, 19:55  [ТС]     Вывод из базы данных в ListView через SimpleCursorAdapter #21
А в каком смысле не заполняю таблицу? Не совсем поняла.
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
31.05.2015, 20:02     Вывод из базы данных в ListView через SimpleCursorAdapter #22
В твоём коде создаётся база, в базе создаются таблицы, но они не наполняются информацией. я про это.
Вот у тебя метод:
Java
1
2
3
4
5
@Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(DATABASE_CREATE_SCRIPT);
    }
Если его дописать вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE_SCRIPT);
 
        ContentValues cv = new ContentValues();
 
        cv.clear();
        cv.put(NAME_COLUMN, "Строка ");
        cv.put(MARK_COLUMN, 1);
        db.insert(DATABASE_TABLE, null, cv);
 
        cv.clear();
        cv.put(NAME_COLUMN, "Строка ");
        cv.put(MARK_COLUMN, 2);
        db.insert(DATABASE_TABLE, null, cv);
 
    }
то уже должны быть видны 2 строчки в твоём ListView.
Rilina
4 / 4 / 0
Регистрация: 16.11.2013
Сообщений: 33
31.05.2015, 21:08  [ТС]     Вывод из базы данных в ListView через SimpleCursorAdapter #23
А в каком смысле не заполняю таблицу? С заполнением все отлично)
НО ОГРОМНОЕ СПАСИБО ЗА ПРОПАВШИЙ ПАРАМЕТР))
ВСЕ ВЫВОДИТ))
Заполнение БД у меня происходит в другом активити)

Добавлено через 3 минуты
Вот код активити, которое сохраняет в БД)
У меня программа сохраняет результаты теста в БД)

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
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.ContentValues;
import android.widget.EditText;
 
 
public class SaveBD extends ActionBarActivity {
    int count;
    String name;
    DatabaseHelper dbHelper;
    SQLiteDatabase sdb;
    EditText mEditText1;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.savebd);
        Intent intent = getIntent();
        count = intent.getIntExtra("COUNT",0);
 
        dbHelper = new DatabaseHelper(this, "mydatabase.db", null, 1);
 
        TextView TextView = (TextView)findViewById(R.id.mark);
        TextView.setText(" " + count);
 
 
    }
 
    @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_save_bd, 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);
    }
    //Вернуться
    public void onClickExit(View view)
    {
        Intent ret = new Intent (this,LessActivity.class); startActivity(ret);
    }
    public void onClickSave(View view)
    {
        Toast toast = Toast.makeText(getApplicationContext(),
                "СОХРАНЕНО!", Toast.LENGTH_SHORT);
        toast.show();
        mEditText1 = (EditText)findViewById(R.id.Name);
        name = mEditText1.getText().toString();
 
        sdb = dbHelper.getWritableDatabase();
        ContentValues newValues = new ContentValues();
                // Задайте значения для каждой строки.
        newValues.put(dbHelper.NAME_COLUMN, name);
        newValues.put(dbHelper.MARK_COLUMN, count);
        // Вставляем данные в базу
        sdb.insert("rezults", null, newValues);
 
    }
}
Добавлено через 1 час 2 минуты
Появился еще один вопрос: Как отсортировать вывод по колонке
Java
1
dbHelper.MARK_COLUMN
.
Я прочитала про groupby, но вот как быть с базой данных не могу понять
Java
1
2
3
4
5
6
7
8
9
            String groupBy;
            String marks []= new String[](dbHelper.MARK_COLUMN); //ЗНАЮ, что это неправильно.
            groupBy = "marks";
            dbHelper = new DatabaseHelper(this, "mydatabase.db", null, 1);
            sdb = dbHelper.getWritableDatabase();
            //  List<String> list = new ArrayList<>();
            Cursor cursor = sdb.query("rezults", new String[]{"_id",dbHelper.NAME_COLUMN, dbHelper.MARK_COLUMN},
                    null, null,
                    groupBy, null, null);
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
31.05.2015, 21:21     Вывод из базы данных в ListView через SimpleCursorAdapter #24
Вот тут найди описание своего метода queryю и вставь свою колонку в параметр String orderBy
Rilina
4 / 4 / 0
Регистрация: 16.11.2013
Сообщений: 33
31.05.2015, 21:37  [ТС]     Вывод из базы данных в ListView через SimpleCursorAdapter #25
Сделала таким образом) Теперь выводит сортируя по оценкам, но увы пока от меньшего к большему.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.results);
        try {
            dbHelper = new DatabaseHelper(this, "mydatabase.db", null, 1);
            sdb = dbHelper.getWritableDatabase();
           Cursor cursor = sdb.query("rezults", new String[]{"_id",dbHelper.NAME_COLUMN, dbHelper.MARK_COLUMN},
                    null, null,
                   dbHelper.MARK_COLUMN, null, null);
 
            // формируем столбцы сопоставления
            String[] from = new String[]{dbHelper.NAME_COLUMN, dbHelper.MARK_COLUMN};
            int[] to = new int[]{R.id.tvName, R.id.tvMark};
 
            // создаем адаптер и настраиваем список
            scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to, 0);
            list = (ListView) findViewById(R.id.listView);
            list.setAdapter(scAdapter);
        } finally {
            sdb.close();
        }
    }
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
31.05.2015, 22:01     Вывод из базы данных в ListView через SimpleCursorAdapter #26
Можно попробовать дописать в тот же строковый параметр, в котором указывается по какому столбцу сортировать, кусок строки +" desc"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2015, 22:30     Вывод из базы данных в ListView через SimpleCursorAdapter
Еще ссылки по теме:

Android - Вывод данных из базы данных Android
ListView, База данных и SimpleCursorAdapter - onItemClick срабатывает только после добавления данных Android
Android SQLite and ListView. Ввод и вывод данных
Переход на новое activity с элемента listView, заполненного через SimpleCursorAdapter Android
Вывод массивов через ListView Android

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

Или воспользуйтесь поиском по форуму:
Rilina
4 / 4 / 0
Регистрация: 16.11.2013
Сообщений: 33
31.05.2015, 22:30  [ТС]     Вывод из базы данных в ListView через SimpleCursorAdapter #27
Все)) ВСЕ РАБОТАЕТ) Ураа))
Тема закрыта.
Yandex
Объявления
31.05.2015, 22:30     Вывод из базы данных в ListView через SimpleCursorAdapter
Ответ Создать тему
Опции темы

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