Pull to refresh

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

Development for 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) {
  }
}


* This source code was highlighted with Source Code Highlighter.


При создании экземпляра класса 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("");
      }
    });
  }
}


* This source code was highlighted with Source Code Highlighter.


В примере у нас есть окно в котором два поля ввода и кнопка, а по нажатию кнопки происходит сохранение. Вначале мы создаем экземляр класса DbOpenHelper, который создает саму базу и таблицы. Затем получаем объект SQLiteDatabase, методом insert которого будет происходить запись. ContentValues это некая обертка над данными, которые будут записаны в бд. В методе put первым аргументом является имя столбца, а вторым сами данные которые будут записаны в столбец, на языке SQL это выглядит так:
INSERT INTO users ( 'login','passw') VALUES ('somelogin','somepass')
В качестве домашнего задания, попробуйте доставать из бд данные и отображать их на экране.
Исходники проекта можно скачать тут.
Отвечу на вопросы в комментах.
P.S. Оригинал в моем блоге
P.S.S. Хочу начать большой проект под android, требуется программист и дизайнер.
Tags: androiddevdatabase
Hubs: Development for Android
Total votes 52: ↑43 and ↓9 +34
Comments 43
Comments Comments 43

Popular right now