成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何正確編寫(xiě)Android 代碼

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

當(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ì)陌生,在A(yíng)ndroid對(duì)于數(shù)據(jù)的訪(fǎng)問(wèn),提出了新的方式,ContentProvider方式,類(lèi)似于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)建一個(gè)使用者(消費(fèi)者)  
  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. 這些代碼讀起來(lái)是不是有點(diǎn)Visual Basic的感覺(jué)?呵呵,所以,以后說(shuō)不定.net,Android,java,blackberry,最終都成為一致的API,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時(shí)間學(xué)這些無(wú)聊的接口了。  
  114.  
  115. 好了,該我們的ContentProvider出場(chǎng)了,與Service,BroadcastReceiver等組件一樣,繼承特定的Interface,在A(yíng)ndroidManifest.xml里聲明這個(gè)ContentProvider,調(diào)用者就可以拿來(lái)使用了。  
  116.  首先我們定義一個(gè)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來(lái)定義這個(gè)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)識(shí)這個(gè)ContentProvider,調(diào)用者可以根據(jù)這個(gè)標(biāo)識(shí)來(lái)找到它,  
  178. 我們組合一個(gè)能找到它的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映射到我們已定義的那個(gè)ContentProvider標(biāo)識(shí)  
  186. /test這個(gè)作為一個(gè)參數(shù),傳給ContentProvider,可以根據(jù)這個(gè)參數(shù)來(lái)決定操作目標(biāo),比如數(shù)據(jù)庫(kù)中的哪張表,文件中的那一部分?jǐn)?shù)據(jù)等。  
  187.  
  188. 我們來(lái)操作這個(gè)內(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.     } 

編寫(xiě)Android 代碼讀起來(lái)是不是有點(diǎn)Visual Basic的感覺(jué)?呵呵,所以,以后說(shuō)不定.net,Android,java,blackberry,最終都成為一致的API,當(dāng)然,這只是我們的期望,這樣大家不必整天花這么多時(shí)間學(xué)這些無(wú)聊的接口了。

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

2015-01-28 14:30:31

android代碼

2010-02-02 18:20:43

Python編寫(xiě)

2010-01-13 13:13:26

C++項(xiàng)目

2022-06-27 06:23:23

代碼編程

2021-06-08 09:35:11

Cleaner ReaReact開(kāi)發(fā)React代碼

2022-12-15 10:52:26

代碼開(kāi)發(fā)

2012-03-15 13:36:51

云計(jì)算JavaSpring框架

2012-07-11 10:51:37

編程

2016-10-11 16:28:11

源代碼

2010-02-03 13:55:51

Python 代碼

2022-06-07 09:30:35

JavaScript變量名參數(shù)

2016-02-24 16:03:34

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

2024-06-24 14:19:48

2016-02-23 11:03:03

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

2021-03-17 08:00:59

JS語(yǔ)言Javascript

2010-03-12 11:07:49

Python retu

2011-04-07 09:18:59

MySQL語(yǔ)法

2024-03-20 08:00:00

軟件開(kāi)發(fā)Java編程語(yǔ)言

2023-10-10 08:00:00

2010-03-16 18:59:15

Java Runnab
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美精品一区二区在线观看 | 在线高清免费观看视频 | 中文字幕一区二区三区精彩视频 | 亚洲精品久久久久久久久久吃药 | 精品久久久网站 | 日韩免费网站 | 国产成人99久久亚洲综合精品 | 欧美精品在线免费观看 | 国产精品久久久久影院色老大 | 在线视频国产一区 | 国产精品免费观看 | 欧美一级全黄 | 久久久久久久久久久蜜桃 | 国产一区二区激情视频 | 91久久国产综合久久91精品网站 | 天堂va在线观看 | 91天堂| 国产精品免费av | 精品日韩在线 | 欧美午夜精品 | 成人高清在线 | www日本高清| 亚洲精品一区中文字幕乱码 | av中文网 | 看特级黄色片 | 69电影网| 九热在线 | 精品亚洲一区二区三区 | 99亚洲视频| 亚洲综合热| 亚洲一区二区久久 | 在线免费中文字幕 | 久久亚洲国产 | 精品一区二区av | 欧美久久精品一级c片 | 国产免费一区二区 | 亚洲一区二区三区在线播放 | 天天操人人干 | av在线免费观看网址 | 新91视频网 | 日韩波多野结衣 |