Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> 如何正確編寫Android 代碼

如何正確編寫Android 代碼

編輯:高級開發

系統啟動完成時,會編寫android 代碼為android.intent.action.BOOT_COMPLETED.我們可以編寫一個BroadcastReceiver 接收這個廣播就可以了,希望大家學習思考。

編寫android 代碼中,對於數據的存貯,有幾種方式,有文件方式,有文件式數據庫方式,android自帶了一個SQLite數據庫,做嵌入開發的人對這個跨平台的本地文件數據庫一定不會陌生,在android對於數據的訪問,提出了新的方式,ContentProvider方式,類似於MS的ContentProvider方式的,OLEDB,及ODBC統一的數據方式。

  1. public void onCreate(SQLiteDatabase db) {
  2. // TODO Auto-generated method stub
  3. }
  4. @Override
  5. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  6. // TODO Auto-generated method stub
  7. }
  8. public DatabaseHelper(Context ct,String dbName)
  9. {
  10. super(ct,dbName,null,1);
  11. }
  12. public boolean insert(String insert)
  13. {
  14. this.getWritableDatabase().execSQL(insert);
  15. return true;
  16. }
  17. public boolean update(String update)
  18. {
  19. this.getWritableDatabase().execSQL(update);
  20. return true;
  21. }
  22. public boolean delete(String del)
  23. {
  24. this.getWritableDatabase().execSQL(del);
  25. return true;
  26. }
  27. public Cursor query(String query)
  28. {
  29. Cursor cur = this.getReadableDatabase().rawQuery(query, null);
  30. return cur;
  31. }
  32. }
  33. 再創建一個使用者(消費者)
  34. package test.DB;
  35. import android.app.Activity;
  36. import android.content.Intent;
  37. import android.database.Cursor;
  38. import android.database.sqlite.SQLiteDatabase;
  39. import android.os.Bundle;
  40. import android.vIEw.Menu;
  41. import android.vIEw.MenuItem;
  42. import android.widget.TextVIEw;
  43. public class DBActivity extends Activity {
  44. private SQLiteDatabase mdb = null;
  45. private DatabaseHelper helper = null;
  46. /** Called when the activity is first created. */
  47. @Override
  48. public void onCreate(Bundle savedInstanceState) {
  49. super.onCreate(savedInstanceState);
  50. initDatabase();
  51. setContentVIEw(R.layout.main);
  52. }
  53. @Override
  54. public boolean onCreateOptionsMenu(Menu menu) {
  55. // TODO Auto-generated method stub
  56. super.onCreateOptionsMenu(menu);
  57. menu.add(1, Menu.FIRST +1, 1, "GetName");
  58. menu.add(1, Menu.FIRST +2, 2, "Test");
  59. return true;
  60. }
  61. public boolean onOptionsItemSelected(MenuItem item) {
  62. // TODO Auto-generated method stub
  63. super.onOptionsItemSelected(item);
  64. switch (item.getItemId())
  65. {
  66. case Menu.FIRST+ 1:
  67. {
  68. TextVIEw tv = (TextView)this.findViewById(R.id.vIEw_main);
  69. tv.setText(this.getName());
  70. break;
  71. }
  72. case Menu.FIRST + 2:
  73. {
  74. this.setTitle("Del Item...");
  75. break;
  76. }
  77. }
  78. return true;
  79. }
  80. private void initDatabase()
  81. {
  82. helper = new DatabaseHelper(this,"dbfile");
  83. //mdb = this.openOrCreateDatabase("dbfile", 0, null);
  84. //String sql_create = "create table test (id int, name TEXT)";
  85. //mdb.execSQL(sql_create);
  86. String sql_insert = "insert into test(id, name) values(55, 'namexx')";
  87. //mdb.execSQL(sql_insert);
  88. helper.insert(sql_insert);
  89. }
  90. private String getName()
  91. {
  92. String name = null;
  93. //mdb = helper.getReadableDatabase();
  94. Cursor cur = helper.query("select * from test");
  95. cur.moveToFirst();
  96. do
  97. {
  98. namename = name + cur.getString(1)+ "\n";
  99. } while(cur.moveToNext());
  100. return name;
  101. }
  102. }
  103. 這些代碼讀起來是不是有點Visual Basic的感覺?呵呵,所以,以後說不定.Net,android,Java,blackberry,最終都成為一致的API,當然,這只是我們的期望,這樣大家不必整天花這麼多時間學這些無聊的接口了。
  104. 好了,該我們的ContentProvider出場了,與Service,BroadcastReceiver等組件一樣,繼承特定的Interface,在androidManifest.XML裡聲明這個ContentProvider,調用者就可以拿來使用了。
  105. 首先我們定義一個ContentProvider:
  106. package test.DB;
  107. import android.content.ContentProvider;
  108. import android.content.ContentValues;
  109. import android.database.Cursor;
  110. import android.Net.Uri;
  111. import android.widget.Toast;
  112. public class TestProvider extends ContentProvider {
  113. private DatabaseHelper mdbHelper = null;
  114. final static String TABLE_NAME = "test";
  115. @Override
  116. public int delete(Uri arg0, String arg1, String[] arg2) {
  117. mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2);
  118. return 0;
  119. }
  120. @Override
  121. public String getType(Uri uri) {
  122. // TODO Auto-generated method stub
  123. return null;
  124. }
  125. @Override
  126. public Uri insert(Uri uri, ContentValues values) {
  127. // TODO Auto-generated method stub
  128. mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values);
  129. return null;
  130. }
  131. @Override
  132. public boolean onCreate() {
  133. // TODO Auto-generated method stub
  134. mdbHelper = new DatabaseHelper(this.getContext(), "dbfile");
  135. return true;
  136. }
  137. @Override
  138. public Cursor query(Uri uri, String[] projection, String selection,
  139. String[] selectionArgs, String sortOrder) {
  140. Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null);
  141. Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT);
  142. return cur;
  143. }
  144. @Override
  145. public int update(Uri uri, ContentValues values, String selection,
  146. String[] selectionArgs) {
  147. mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null);
  148. return 0;
  149. }
  150. }
  151. 老規矩,androidManifest.XML來定義這個Provider
  152. <provider android:label="test_provider" android:authoritIEs="com.my.provider" android:name="TestProvider">
  153. </provider>
  154. 這裡的android:authoritIEs = "com.my.provider"是標識這個ContentProvider,調用者可以根據這個標識來找到它,
  155. 我們組合一個能找到它的Uri,
  156. public class ProviderConst {
  157. public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");
  158. }
  159. content 指的是內容提供者ContentProvider。
  160. //com.my.provider映射到我們已定義的那個ContentProvider標識
  161. /test這個作為一個參數,傳給ContentProvider,可以根據這個參數來決定操作目標,比如數據庫中的哪張表,文件中的那一部分數據等。
  162. 我們來操作這個內容提供者:
  163. private String getName()
  164. {
  165. String name = null;
  166. Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
  167. if (cur == null)
  168. return null;
  169. cur.moveToFirst();
  170. do
  171. {
  172. namename = name + cur.getString(1)+ "\n";
  173. } while(cur.moveToNext());
  174. return name;
  175. }
  176. 我們也可以這樣使用:
  177. private String getName()
  178. {
  179. String name = null;
  180. Cursor cur = this.managedQuery(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
  181. if (cur == null)
  182. return null;
  183. cur.moveToFirst();
  184. do
  185. {
  186. namename = name + cur.getString(1)+ "\n";
  187. } while(cur.moveToNext());
  188. return name;
  189. }

編寫android 代碼讀起來是不是有點Visual Basic的感覺?呵呵,所以,以後說不定.Net,android,Java,blackberry,最終都成為一致的API,當然,這只是我們的期望,這樣大家不必整天花這麼多時間學這些無聊的接口了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved