編輯:Android開發教程
目前所介紹的方法只是用來存儲一些簡單的數據。如果想要存儲關系型數據,那麼使用數據庫將會更加的 效率。舉個例子,你要存儲學校裡面每一個學生的分數,這種情況下,最好使用數據庫,因為你可以查詢某 個學生的具體分數。而且,使用數據庫能夠保持不同數據之間關系的完整性。
Android使用SQLite數 據庫系統。使用這種數據庫,只有創建它的程序可以使用它,別的程序無法訪問到它。
在接下來的幾 節中,會簡述如何通過編碼在你的程序中創建一個SQLite數據庫。對於Android來說,通過編碼創建的數據庫 的存儲位置是/data/data/<packane_name>
/databases 。
想要處理數據庫的一種良好 的方式就是創建一個數據庫輔助類,這個類中,封裝了所有的數據操作方式。因此,這節中我們來看看如何 創建一個數據庫輔助類DBAdapter,這個類中包含創建,打開,關閉和使用SQLite數據庫。
我們講創 建一個數據庫,名字叫MyDB;包含一張表,名字叫contacts,有3列_id,name和email。
1. 創建一個工程,Databases。
2. 創建一個類,DBAdater。
3. DBAdapter.java中的代碼。
public class DBAdapter { static final String KEY_ROWID = "_id"; static final String KEY_NAME = "name"; static final String KEY_EMAIL = "email"; static final String TAG = "DBAdapter"; static final String DATABASE_NAME = "MyDB"; static final String DATABASE_TABLE = "contacts"; static final int DATABASE_VERSION = 2; static final String DATABASE_CREATE = "create table contacts (_id integer primary key autoincrement, " + "name text not null, email text not null);"; final Context context; DatabaseHelper DBHelper; SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { db.execSQL(DATABASE_CREATE); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS contacts"); onCreate(db); } } //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } //---closes the database--- public void close() { DBHelper.close(); } //---insert a contact into the database--- public long insertContact(String name, String email) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_NAME, name); initialValues.put(KEY_EMAIL, email); return db.insert(DATABASE_TABLE, null, initialValues); } //---deletes a particular contact--- public boolean deleteContact(long rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } //---retrieves all the contacts--- public Cursor getAllContacts() { return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_EMAIL}, null, null, null, null, null); } //---retrieves a particular contact--- public Cursor getContact(long rowId) throws SQLException { Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } //---updates a contact--- public boolean updateContact(long rowId, String name, String email) { ContentValues args = new ContentValues(); args.put(KEY_NAME, name); args.put(KEY_EMAIL, email); return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; } }
菜單可以用來顯示額外的選項,這些選項也不必出現在主界面中。在Android框架中,主要有2種菜單:選項菜單 —— 顯示與當前活動有關的信息。使用M
Activity分類示例的最後幾個例子是來顯示半透明Activity。例子大同小異。實現Activity的半透明效果主要是通過Style和 Theme來實現的。看看Tra
1.介紹現在游戲中的廣告基本上已經成為了游戲創作者的一個重要的收入來源。其實插入廣告還是挺簡單的,本文選擇百度廣告聯盟作為案例(總覺得百度不會拖欠工資)。注:不過,插入廣
作為Android應用開發者,不得不面對一個尴尬的局面,就是自己辛辛苦苦開發的應用可以被別人很輕易的就反編譯出來。Google似乎也發現了這個問題,從SDK2.3開始我們