Хранение Данных в Android

В прошлом своем посте я писал о создании всплывающих менюшек, сегодня же мы поговорим о более важной теме такой, как хранение данных.В android есть несколько способов хранения данных: общие настройки, бд и тд. В этом посте я расскажу о том как хранить данные в БД.
В качестве БД android использует встраиваемую SQLite. SQLite очень быстрая база, поэтому ее использование на мобильной платформе не приводит к резкому уменьшению производительности. Перейдем к описанию кода. Гугл позаботился о наших нервах и написал небольшой класс утилиту SQLiteOpenHelper.
public class DbOpenHelper extends SQLiteOpenHelper{

    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "test";

    public static final String TABLE_NAME = "users";
    public static final String LOGIN = "login";
    public static final String PASSW = "passw";
    private static final String CREATE_TABLE = "create table " + TABLE_NAME + " ( _id integer primary key autoincrement, "
            + LOGIN + " TEXT, " + PASSW + " TEXT)";


    public DbOpenHelper(Context context) {
        super(context, DB_NAME, null,DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

При создании экземпляра класса DbOpenHelper будет проверено, существует ли база с именем test, если существует, то будет вызван метод onUpgrade, если нет то onCreate в котором мы создаем таблицу users(обычно в этом методе создают таблицы и инициализируют их значениями по умолчанию). У класса SQLiteOpenHelper есть методы getReadableDatabase и getWritableDatabase, которые возвращают экземпляр класса SQLiteDatabase. С помощью этого экземпляра мы и будет работать с БД. У него есть все нужные нам методы: insert,update,query,delete и тд.
Напишем небольшое приложение сохраняющее логин и пароль в базу
public class TestActivity extends Activity {

    EditText loginEditText = null;
    EditText passEditText = null;
    Button saveButton = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        loginEditText = (EditText) findViewById(R.id.login);
        passEditText = (EditText) findViewById(R.id.passw);
        saveButton = (Button) findViewById(R.id.btn1);

        saveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                DbOpenHelper dbOpenHelper = new DbOpenHelper(TestActivity.this);
                SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
                ContentValues cv = new ContentValues();
                cv.put(DbOpenHelper.LOGIN,loginEditText.getText().toString());
                cv.put(DbOpenHelper.PASSW,passEditText.getText().toString());
                db.insert(DbOpenHelper.TABLE_NAME,null,cv);
                db.close();
                loginEditText.setText("");
                passEditText.setText("");
            }
        });
    }
}

В примере у нас есть окно в котором два поля ввода и кнопка, а по нажатию кнопки происходит сохранение.Вначале мы создаем экземляр класса DbOpenHelper, который создает саму базу и таблицы. Затем получаем объект SQLiteDatabase, методом insert которого будет происходить запись. ContentValues это некая обертка над данными, которые будут записаны в бд. В методе put первым аргументом является имя столбца, а вторым сами данные которые будут записаны в столбец, на языке SQL это выглядит так:
INSERT INTO users ( 'login','passw') VALUES ('somelogin','somepass')

В качестве домашнего задания, попробуйте доставать из бд данные и отображать их на экране.
Исходники проекта можно скачать тут.
Отвечу на вопросы в комментах.
P.S. Хочу начать большой проект под android, требуется программист и дизайнер.
  • +2
  • 09 сентября 2010, 13:26
  • Mecid

Комментарии (5)

RSS свернуть / развернуть
+
0
вопросов нет? или никто не прочитал?
avatar

Mecid

  • 09 сентября 2010, 18:40
+
0
Надо купить какой-нибудь дешевый андроидный девайс и попробовать что-нибудь написать для него.
А какого плана проект хочешь начать?
avatar

baxi

  • 09 сентября 2010, 18:47
+
+1
всегда есть эмулятор)
Хочу начать писать органайзер с бесконечным множеством возможностей и супер крутым дизайном)))))
avatar

Mecid

  • 09 сентября 2010, 18:51
+
0
Отличная идея! Не подскажите хороший эмулятор? Андроиду нужно, то что есть в яблоке, но нет в андроиде. Аппл очень богат хорошими приложениями, однако не всех их можно увидеть на андроиде.
avatar

F2R

  • 10 сентября 2010, 17:49
+
0
скачайте android sdk, там есть все чтобы начать писать и тестировать приложение
avatar

Mecid

  • 10 сентября 2010, 19:50

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.