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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 5.00
JinTaiYangGuoYe
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 9
#1

Заполнение ListView из БД - Программирование Android

05.07.2012, 13:46. Просмотров 5493. Ответов 2
Метки нет (Все метки)

Есть одна активити, в ней 2 текстовых поля и кнопка, отправляющая содержимое этих полей как строку в БД.
Есть другая активити, которая должна в listView отображать содержимое БД построчно, однако выбивает NullPointerException. Уже голову сломал, почему не работает, помогите разобраться пожалуйста.

Первая активити:
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
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
 
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
public class quickadd extends Activity 
{
    private DataHelper dh; //класс для работы с БД
    public  EditText editText1;//amount
    public  EditText editText2; //note
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quickadd);
        editText1 = (EditText) findViewById(R.id.editText1);
        editText2 = (EditText) findViewById(R.id.editText2);
    }
   
    public void btnAdd_Click(View v)
    {
        switch (v.getId()) 
            {
                case R.id.btnAdd:
                    try{
                    dh = getDataHelper();
                    dh.insert(editText1.getText().toString() + " ; " + editText2.getText().toString());
                    Toast.makeText(getApplicationContext(), 
                            "Recorded successfully", Toast.LENGTH_LONG).show();
                    }
                    catch(Throwable t)
                    {
                        Toast.makeText(getApplicationContext(), 
                        "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
                    }
                break;      
            }   
    }
    public DataHelper getDataHelper() {
        return new DataHelper(this);
    }
}
Вторая, проблемная активити:
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
import java.util.List;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
public class mydebts extends Activity 
{
    private DataHelper dh;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mydebts);
        try {
        List<String> list= dh.selectAll(); //забиваю данные из БД в лист
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,   R.layout.list_item, list); //прикручиваю адаптер
        ListView lv = (ListView)findViewById(R.id.listView1);
        lv.setAdapter(adapter);
        }
        catch(Throwable t) {  //и тут фейл: NullPointerException
            Toast.makeText(getApplicationContext(), 
                    "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
        }
        
    }
    
    
    public DataHelper getDataHelper() {
        return new DataHelper(this);
    }
}

Класс для работы с БД:
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
import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
 
public class DataHelper {
    // Имя базы данных
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final String TABLE_NAME = "notes";
    private static final int DATABASE_VERSION = 1;
 
    private Context context;
    private SQLiteDatabase db;
 
    private static final String INSERT = "insert into " + TABLE_NAME
            + "(name) values(?)";
    private SQLiteStatement insertStmt;
 
    public DataHelper(Context context) {
        this.context = context;
        OpenHelper openHelper = new OpenHelper(this.context);
        this.db = openHelper.getWritableDatabase();
        this.insertStmt = this.db.compileStatement(INSERT);
    }
 
    // Операции при вставке записи
    public long insert(String name) {
        this.insertStmt.bindString(1, name);
        return this.insertStmt.executeInsert();
    }
 
    // Удаляем все записи в таблице
    public void deleteAll() {
        this.db.delete(TABLE_NAME, null, null);
    }
 
    public List<String> selectAll() {
        List<String> list = new ArrayList<String>();
        Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" },
                null, null, null, null, "name desc");
 
        if (cursor.moveToFirst()) {
            do {
                list.add(cursor.getString(0));
 
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        return list;
    }
 
    private static class OpenHelper extends SQLiteOpenHelper {
        public OpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            // Запрос создания таблицы
            db.execSQL("CREATE TABLE " + TABLE_NAME
                    + "(id INTEGER PRIMARY KEY, name TEXT)");
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // запрос удаления таблицы
            db.execSQL("DROP TABLE IF EXIST " + TABLE_NAME);
            onCreate(db);
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение ListView из БД (Программирование Android):

Заполнение ListView в AsyncTask - Программирование Android
Нужно заполнить ListView картинками, которые скачиваются в AsyncTask с помощью Picasso. Картинки скачиваются нормально, ArrayList и...

Некорректное заполнение ListView - Программирование Android
Есть 2 фрагмента, в первом лист заполняемый с помощью TypedArray. Когда я перехожу по позиции листа и возвращаюсь назад, то лист...

Заполнение ListView из HashMap - Программирование Android
Добрый день. Столкнулся с некоторой проблемой при наполнении ListView с помощью HashMap. Проблема вот в чем, заполняю HashMap с помощью...

Неверно отображается заполнение прогрессбара в элементах ListView - Программирование Android
Добрый день. Мне нужно создать ListView, в элементах которого отображается ProgressBar нестандартного цвета. В методе getView моего списка...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
05.07.2012, 16:02 #2
Java
1
List<String> list= dh.selectAll(); //забиваю данные из БД в лист
у вас в этот момент dh = null
для начала нужно проинициализировать, dh = getDataHelper();
JinTaiYangGuoYe
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 9
05.07.2012, 17:12  [ТС] #3
тфу блин
спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 17:12
Привет! Вот еще темы с ответами:

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...


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

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

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