вторник, 4 октября 2011 г.

Хранение данных в 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')

Источник: http://habrahabr.ru/

Unity3D, 2D платформер, персонаж прилипает к стене после прыжка.

     Если следовать логике физической модели Unity3D, когда на объект действует горизонтальная сила(в принципе она может быть в любом напра...