自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何正確編寫Android 代碼

移動開發(fā) Android
Google與開放手機聯(lián)盟合作開發(fā)了 Android,這個聯(lián)盟由包括中國移動、摩托羅拉、高通、宏達電和 T-Mobile 在內(nèi)的 30 多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。

當(dāng)系統(tǒng)啟動完成時,會編寫Android 代碼為android.intent.action.BOOT_COMPLETED.我們可以編寫一個BroadcastReceiver 接收這個廣播就可以了,希望大家學(xué)習(xí)思考。

編寫Android 代碼中,對于數(shù)據(jù)的存貯,有幾種方式,有文件方式,有文件式數(shù)據(jù)庫方式,Android自帶了一個SQLite數(shù)據(jù)庫,做嵌入開發(fā)的人對這個跨平臺的本地文件數(shù)據(jù)庫一定不會陌生,在Android對于數(shù)據(jù)的訪問,提出了新的方式,ContentProvider方式,類似于MS的ContentProvider方式的,OLEDB,及ODBC統(tǒng)一的數(shù)據(jù)方式。

  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. 再創(chuàng)建一個使用者(消費者)  
  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,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時間學(xué)這些無聊的接口了。  
  114.  
  115. 好了,該我們的ContentProvider出場了,與Service,BroadcastReceiver等組件一樣,繼承特定的Interface,在AndroidManifest.xml里聲明這個ContentProvider,調(diào)用者就可以拿來使用了。  
  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.  老規(guī)矩,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"是標(biāo)識這個ContentProvider,調(diào)用者可以根據(jù)這個標(biāo)識來找到它,  
  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 指的是內(nèi)容提供者ContentProvider。  
  185. //com.my.provider映射到我們已定義的那個ContentProvider標(biāo)識  
  186. /test這個作為一個參數(shù),傳給ContentProvider,可以根據(jù)這個參數(shù)來決定操作目標(biāo),比如數(shù)據(jù)庫中的哪張表,文件中的那一部分?jǐn)?shù)據(jù)等。  
  187.  
  188. 我們來操作這個內(nèi)容提供者:  
  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,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時間學(xué)這些無聊的接口了。

責(zé)任編輯:chenqingxiang 來源: 清華大學(xué)出版社
相關(guān)推薦

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開發(fā)React代碼

2022-06-27 06:23:23

代碼編程

2022-12-15 10:52:26

代碼開發(fā)

2012-03-15 13:36:51

云計算JavaSpring框架

2012-07-11 10:51:37

編程

2016-10-11 16:28:11

源代碼

2024-06-24 14:19:48

2022-06-07 09:30:35

JavaScript變量名參數(shù)

2010-02-03 13:55:51

Python 代碼

2016-02-24 16:03:34

代碼質(zhì)量編寫函數(shù)

2010-03-12 11:07:49

Python retu

2016-02-23 11:03:03

代碼質(zhì)量編寫函數(shù)

2021-03-17 08:00:59

JS語言Javascript

2011-04-07 09:18:59

MySQL語法

2024-03-20 08:00:00

軟件開發(fā)Java編程語言

2023-10-10 08:00:00

2024-04-01 00:00:00

AnsibleJenkins應(yīng)用程序
點贊
收藏

51CTO技術(shù)棧公眾號