如何正確編寫(xiě)Android 代碼
當(dāng)系統(tǒng)啟動(dòng)完成時(shí),會(huì)編寫(xiě)Android 代碼為android.intent.action.BOOT_COMPLETED.我們可以編寫(xiě)一個(gè)BroadcastReceiver 接收這個(gè)廣播就可以了,希望大家學(xué)習(xí)思考。
在編寫(xiě)Android 代碼中,對(duì)于數(shù)據(jù)的存貯,有幾種方式,有文件方式,有文件式數(shù)據(jù)庫(kù)方式,Android自帶了一個(gè)SQLite數(shù)據(jù)庫(kù),做嵌入開(kāi)發(fā)的人對(duì)這個(gè)跨平臺(tái)的本地文件數(shù)據(jù)庫(kù)一定不會(huì)陌生,在Android對(duì)于數(shù)據(jù)的訪問(wèn),提出了新的方式,ContentProvider方式,類似于MS的ContentProvider方式的,OLEDB,及ODBC統(tǒng)一的數(shù)據(jù)方式。
- 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;
 - }
 - }
 - 再創(chuàng)建一個(gè)使用者(消費(fèi)者)
 - 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;
 - }
 - }
 - 這些代碼讀起來(lái)是不是有點(diǎn)Visual Basic的感覺(jué)?呵呵,所以,以后說(shuō)不定.net,Android,java,blackberry,最終都成為一致的API,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時(shí)間學(xué)這些無(wú)聊的接口了。
 - 好了,該我們的ContentProvider出場(chǎng)了,與Service,BroadcastReceiver等組件一樣,繼承特定的Interface,在AndroidManifest.xml里聲明這個(gè)ContentProvider,調(diào)用者就可以拿來(lái)使用了。
 - 首先我們定義一個(gè)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;
 - }
 - }
 - 老規(guī)矩,AndroidManifest.xml來(lái)定義這個(gè)Provider
 - <provider android:label="test_provider" android:authorities="com.my.provider" android:name="TestProvider">
 - </provider>
 - 這里的android:authorities = "com.my.provider"是標(biāo)識(shí)這個(gè)ContentProvider,調(diào)用者可以根據(jù)這個(gè)標(biāo)識(shí)來(lái)找到它,
 - 我們組合一個(gè)能找到它的Uri,
 - public class ProviderConst {
 - public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");
 - }
 - content 指的是內(nèi)容提供者ContentProvider。
 - //com.my.provider映射到我們已定義的那個(gè)ContentProvider標(biāo)識(shí)
 - /test這個(gè)作為一個(gè)參數(shù),傳給ContentProvider,可以根據(jù)這個(gè)參數(shù)來(lái)決定操作目標(biāo),比如數(shù)據(jù)庫(kù)中的哪張表,文件中的那一部分?jǐn)?shù)據(jù)等。
 - 我們來(lái)操作這個(gè)內(nèi)容提供者:
 - 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;
 - }
 
編寫(xiě)Android 代碼讀起來(lái)是不是有點(diǎn)Visual Basic的感覺(jué)?呵呵,所以,以后說(shuō)不定.net,Android,java,blackberry,最終都成為一致的API,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時(shí)間學(xué)這些無(wú)聊的接口了。















 
 
 






 
 
 
 