如何正确编写Android 代码

移动开发 Android
Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。

当系统启动完成时,会编写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. 再创建一个使用者(消费者)  
  35.  
  36.  
  37. package test.DB;  
  38.  
  39. import android.app.Activity;  
  40. import android.content.Intent;  
  41. import android.database.Cursor;  
  42. import android.database.sqlite.SQLiteDatabase;  
  43. import android.os.Bundle;  
  44. import android.view.Menu;  
  45. import android.view.MenuItem;  
  46. import android.widget.TextView;  
  47.  
  48. public class DBActivity extends Activity {  
  49.  private SQLiteDatabase mdb = null;  
  50.  private DatabaseHelper helper = null;  
  51.     /** Called when the activity is first created. */  
  52.     @Override  
  53.     public void onCreate(Bundle savedInstanceState) {  
  54.         super.onCreate(savedInstanceState);  
  55.         initDatabase();  
  56.         setContentView(R.layout.main);          
  57.     }  
  58.     @Override  
  59.  public boolean onCreateOptionsMenu(Menu menu) {  
  60.   // TODO Auto-generated method stub  
  61.   super.onCreateOptionsMenu(menu);     
  62.   menu.add(1, Menu.FIRST +1, 1, "GetName");    
  63.   menu.add(1, Menu.FIRST +2, 2, "Test");     
  64.   return true;    
  65.  }  
  66.       
  67.     public boolean onOptionsItemSelected(MenuItem item) {  
  68.   // TODO Auto-generated method stub  
  69.   super.onOptionsItemSelected(item);  
  70.   switch (item.getItemId())  
  71.   {  
  72.    case Menu.FIRST+ 1:  
  73.    {  
  74.     TextView tv = (TextView)this.findViewById(R.id.view_main);  
  75.     tv.setText(this.getName());  
  76.     break;  
  77.    }  
  78.    case Menu.FIRST + 2:  
  79.    {  
  80.     this.setTitle("Del Item...");  
  81.     break;  
  82.    }     
  83.   }  
  84.   return true;  
  85.  }  
  86.       
  87.     private void initDatabase()  
  88.     {  
  89.      helper = new DatabaseHelper(this,"dbfile");  
  90.      //mdb = this.openOrCreateDatabase("dbfile", 0, null);  
  91.      //String sql_create = "create table test (id int, name TEXT)";  
  92.      //mdb.execSQL(sql_create);  
  93.      String sql_insert = "insert into test(id, name) values(55, 'namexx')";  
  94.      //mdb.execSQL(sql_insert);  
  95.      helper.insert(sql_insert);  
  96.     }  
  97.     private String getName()  
  98.     {  
  99.      String name = null;    
  100.      //mdb = helper.getReadableDatabase();  
  101.      Cursor cur = helper.query("select * from test");  
  102.      cur.moveToFirst();  
  103.      do  
  104.      {  
  105.       namename = name  + cur.getString(1)+ "\n";        
  106.         
  107.      } while(cur.moveToNext());        
  108.        
  109.      return name;  
  110.     }  
  111. }  
  112.  
  113. 这些代码读起来是不是有点Visual Basic的感觉?呵呵,所以,以后说不定.net,Android,java,blackberry,最终都成为一致的API,当然,这只是我们的期望,这样大家不必整天花这么多时间学这些无聊的接口了。  
  114.  
  115. 好了,该我们的ContentProvider出场了,与Service,BroadcastReceiver等组件一样,继承特定的Interface,在AndroidManifest.xml里声明这个ContentProvider,调用者就可以拿来使用了。  
  116.  首先我们定义一个ContentProvider:  
  117.  
  118.  
  119. package test.DB;  
  120.  
  121. import android.content.ContentProvider;  
  122. import android.content.ContentValues;  
  123. import android.database.Cursor;  
  124. import android.net.Uri;  
  125. import android.widget.Toast;  
  126.  
  127. public class TestProvider extends ContentProvider {  
  128.     private DatabaseHelper mdbHelper = null;  
  129.     final static String TABLE_NAME = "test";  
  130.  @Override  
  131.  public int delete(Uri arg0, String arg1, String[] arg2) {  
  132.   mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2);  
  133.   return 0;  
  134.  }  
  135.  
  136.  @Override  
  137.  public String getType(Uri uri) {  
  138.   // TODO Auto-generated method stub  
  139.   return null;  
  140.  }  
  141.  
  142.  @Override  
  143.  public Uri insert(Uri uri, ContentValues values) {  
  144.   // TODO Auto-generated method stub  
  145.   mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values);  
  146.   return null;  
  147.  }  
  148.  
  149.  @Override  
  150.  public boolean onCreate() {  
  151.   // TODO Auto-generated method stub  
  152.   mdbHelper = new DatabaseHelper(this.getContext(), "dbfile");  
  153.   return true;  
  154.  }  
  155.  
  156.  @Override  
  157.  public Cursor query(Uri uri, String[] projection, String selection,  
  158.    String[] selectionArgs, String sortOrder) {  
  159.   Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null);  
  160.   Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT);  
  161.   return cur;  
  162.  }  
  163.  
  164.  @Override  
  165.  public int update(Uri uri, ContentValues values, String selection,  
  166.    String[] selectionArgs) {  
  167.   mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null);  
  168.   return 0;  
  169.  }  
  170.  
  171. }  
  172.  
  173.  
  174.  老规矩,AndroidManifest.xml来定义这个Provider  
  175. <provider android:label="test_provider" android:authorities="com.my.provider" android:name="TestProvider"> 
  176.     </provider> 
  177. 这里的android:authorities = "com.my.provider"是标识这个ContentProvider,调用者可以根据这个标识来找到它,  
  178. 我们组合一个能找到它的Uri,  
  179. public class ProviderConst {  
  180.  public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");  
  181.  
  182. }  
  183.  
  184. content 指的是内容提供者ContentProvider。  
  185. //com.my.provider映射到我们已定义的那个ContentProvider标识  
  186. /test这个作为一个参数,传给ContentProvider,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。  
  187.  
  188. 我们来操作这个内容提供者:  
  189.  private String getName()  
  190.     {  
  191.      String name = null;        
  192.      Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);  
  193.      if (cur == null)  
  194.       return null;  
  195.      cur.moveToFirst();  
  196.      do  
  197.      {  
  198.       namename = name  + cur.getString(1)+ "\n";        
  199.         
  200.      } while(cur.moveToNext());        
  201.        
  202.      return name;  
  203.     }  
  204. 我们也可以这样使用:  
  205. private String getName()  
  206.     {  
  207.      String name = null;        
  208.      Cursor cur = this.managedQuery(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);  
  209.      if (cur == null)  
  210.       return null;  
  211.      cur.moveToFirst();  
  212.      do  
  213.      {  
  214.       namename = name  + cur.getString(1)+ "\n";        
  215.         
  216.      } while(cur.moveToNext());        
  217.        
  218.      return name;  
  219.     } 

编写Android 代码读起来是不是有点Visual Basic的感觉?呵呵,所以,以后说不定.net,Android,java,blackberry,最终都成为一致的API,当然,这只是我们的期望,这样大家不必整天花这么多时间学这些无聊的接口了。

责任编辑:chenqingxiang 来源: 清华大学出版社
相关推荐

2015-01-28 14:30:31

android代码

2010-02-02 18:20:43

Python编写

2010-01-13 13:13:26

C++项目

2021-06-08 09:35:11

Cleaner ReaReact开发React代码

2022-06-27 06:23:23

代码编程

2022-12-15 10:52:26

代码开发

2012-03-15 13:36:51

云计算JavaSpring框架

2012-07-11 10:51:37

编程

2016-10-11 16:28:11

源代码

2016-02-24 16:03:34

代码质量编写函数

2022-06-07 09:30:35

JavaScript变量名参数

2010-02-03 13:55:51

Python 代码

2021-03-17 08:00:59

JS语言Javascript

2010-03-12 11:07:49

Python retu

2016-02-23 11:03:03

代码质量编写函数

2011-04-07 09:18:59

MySQL语法

2023-10-10 08:00:00

2024-03-20 08:00:00

软件开发Java编程语言

2010-03-16 18:59:15

Java Runnab

2013-04-15 09:02:43

JavaScriptJS
点赞
收藏

51CTO技术栈公众号