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

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

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

Заполнение ListView из БД - Android

05.07.2012, 13:46. Просмотров 5296. Ответов 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
Android ListView
Заполнение ListView из HashMap Android
Переход из Listview в Listview Android
ListView Android
Android id ListView
Android из БД в ListView
Android Неверно отображается заполнение прогрессбара в элементах ListView
Заполнение ListView в AsyncTask Android
Android ListView
Android Listview в listview
Android Некорректное заполнение ListView

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
05.07.2012, 16:02     Заполнение ListView из БД #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  [ТС]     Заполнение ListView из БД #3
тфу блин
спасибо
Yandex
Объявления
05.07.2012, 17:12     Заполнение ListView из БД
Ответ Создать тему
Опции темы

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