編輯:高級開發
當系統啟動完成時,會編寫android 代碼為android.intent.action.BOOT_COMPLETED.我們可以編寫一個BroadcastReceiver 接收這個廣播就可以了,希望大家學習思考。
在編寫android 代碼中,對於數據的存貯,有幾種方式,有文件方式,有文件式數據庫方式,android自帶了一個SQLite數據庫,做嵌入開發的人對這個跨平台的本地文件數據庫一定不會陌生,在android對於數據的訪問,提出了新的方式,ContentProvider方式,類似於MS的ContentProvider方式的,OLEDB,及ODBC統一的數據方式。
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- }
- public DatabaseHelper(Context ct,String dbName)
- {
- super(ct,dbName,null,1);
- }
- public boolean insert(String insert)
- {
- this.getWritableDatabase().execSQL(insert);
- return true;
- }
- public boolean update(String update)
- {
- this.getWritableDatabase().execSQL(update);
- return true;
- }
- public boolean delete(String del)
- {
- this.getWritableDatabase().execSQL(del);
- return true;
- }
- public Cursor query(String query)
- {
- Cursor cur = this.getReadableDatabase().rawQuery(query, null);
- return cur;
- }
- }
- 再創建一個使用者(消費者)
- package test.DB;
- import android.app.Activity;
- import android.content.Intent;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.os.Bundle;
- import android.vIEw.Menu;
- import android.vIEw.MenuItem;
- import android.widget.TextVIEw;
- public class DBActivity extends Activity {
- private SQLiteDatabase mdb = null;
- private DatabaseHelper helper = null;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- initDatabase();
- setContentVIEw(R.layout.main);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // TODO Auto-generated method stub
- super.onCreateOptionsMenu(menu);
- menu.add(1, Menu.FIRST +1, 1, "GetName");
- menu.add(1, Menu.FIRST +2, 2, "Test");
- return true;
- }
- public boolean onOptionsItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- super.onOptionsItemSelected(item);
- switch (item.getItemId())
- {
- case Menu.FIRST+ 1:
- {
- TextVIEw tv = (TextView)this.findViewById(R.id.vIEw_main);
- tv.setText(this.getName());
- break;
- }
- case Menu.FIRST + 2:
- {
- this.setTitle("Del Item...");
- break;
- }
- }
- return true;
- }
- private void initDatabase()
- {
- helper = new DatabaseHelper(this,"dbfile");
- //mdb = this.openOrCreateDatabase("dbfile", 0, null);
- //String sql_create = "create table test (id int, name TEXT)";
- //mdb.execSQL(sql_create);
- String sql_insert = "insert into test(id, name) values(55, 'namexx')";
- //mdb.execSQL(sql_insert);
- helper.insert(sql_insert);
- }
- private String getName()
- {
- String name = null;
- //mdb = helper.getReadableDatabase();
- Cursor cur = helper.query("select * from test");
- cur.moveToFirst();
- do
- {
- namename = name + cur.getString(1)+ "\n";
- } while(cur.moveToNext());
- return name;
- }
- }
- 這些代碼讀起來是不是有點Visual Basic的感覺?呵呵,所以,以後說不定.Net,android,Java,blackberry,最終都成為一致的API,當然,這只是我們的期望,這樣大家不必整天花這麼多時間學這些無聊的接口了。
- 好了,該我們的ContentProvider出場了,與Service,BroadcastReceiver等組件一樣,繼承特定的Interface,在androidManifest.XML裡聲明這個ContentProvider,調用者就可以拿來使用了。
- 首先我們定義一個ContentProvider:
- package test.DB;
- import android.content.ContentProvider;
- import android.content.ContentValues;
- import android.database.Cursor;
- import android.Net.Uri;
- import android.widget.Toast;
- public class TestProvider extends ContentProvider {
- private DatabaseHelper mdbHelper = null;
- final static String TABLE_NAME = "test";
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2);
- return 0;
- }
- @Override
- public String getType(Uri uri) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- // TODO Auto-generated method stub
- mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values);
- return null;
- }
- @Override
- public boolean onCreate() {
- // TODO Auto-generated method stub
- mdbHelper = new DatabaseHelper(this.getContext(), "dbfile");
- return true;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null);
- Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT);
- return cur;
- }
- @Override
- public int update(Uri uri, ContentValues values, String selection,
- String[] selectionArgs) {
- mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null);
- return 0;
- }
- }
- 老規矩,androidManifest.XML來定義這個Provider
- <provider android:label="test_provider" android:authoritIEs="com.my.provider" android:name="TestProvider">
- </provider>
- 這裡的android:authoritIEs = "com.my.provider"是標識這個ContentProvider,調用者可以根據這個標識來找到它,
- 我們組合一個能找到它的Uri,
- public class ProviderConst {
- public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");
- }
- content 指的是內容提供者ContentProvider。
- //com.my.provider映射到我們已定義的那個ContentProvider標識
- /test這個作為一個參數,傳給ContentProvider,可以根據這個參數來決定操作目標,比如數據庫中的哪張表,文件中的那一部分數據等。
- 我們來操作這個內容提供者:
- private String getName()
- {
- String name = null;
- Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
- if (cur == null)
- return null;
- cur.moveToFirst();
- do
- {
- namename = name + cur.getString(1)+ "\n";
- } while(cur.moveToNext());
- return name;
- }
- 我們也可以這樣使用:
- private String getName()
- {
- String name = null;
- Cursor cur = this.managedQuery(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
- if (cur == null)
- return null;
- cur.moveToFirst();
- do
- {
- namename = name + cur.getString(1)+ "\n";
- } while(cur.moveToNext());
- return name;
- }
編寫android 代碼讀起來是不是有點Visual Basic的感覺?呵呵,所以,以後說不定.Net,android,Java,blackberry,最終都成為一致的API,當然,這只是我們的期望,這樣大家不必整天花這麼多時間學這些無聊的接口了。
android開發采用了軟件堆層(software stack,又名軟件疊層)的架構,主要分為三部分,下面就對這三個部分做一下自己的見解和看法,希望能夠給大家帶來相關的
2011 年 2 月,Danger 時代結束。T Mobile 的新 CEO Philipp Humm 實施新計劃,確認了向現有的 Sidekick 用戶關閉 Dang
前不久我們為大家介紹過在MyEclipse 8.6上搭建android開發環境,本文為一篇外文翻譯,我們將介紹如何學習安裝 android NDK 並開始使用它。在這一
SDK and AVD Manager 對話框內的New 按鈕.為你的AVD鍵入如下的設置:1234Name: android_1.6Target: Google AP