Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> ContentProvider + ContentObserver + SQLiteDatabase

ContentProvider + ContentObserver + SQLiteDatabase

編輯:初級開發

大V的回帖 + google + 參考系統源碼,自己寫了個ContentProvider + ContentObserver + SQLiteDatabase的例子

感謝大V
(由於還沒接收到驗證郵件,不能發日志,就發壇子裡了,獻丑了...)

  1. package lab.sodino.broadcastaction;
     
  2. import lab.sodino.util.DatabaSEOpenHelper;
     
  3. import lab.sodino.util.SodinoOut;
     
  4. import android.app.Activity;
     
  5. import android.content.ContentResolver;
     
  6. import android.database.ContentObserver;
     
  7. import android.database.Cursor;
     
  8. import android.os.Bundle;
     
  9. import android.os.Handler;
     
  10. import android.os.Message;
     
  11. import android.view.VIEw;
     
  12. import android.view.VIEwGroup.LayoutParams;
     
  13. import android.widget.Button;
     
  14. import android.widget.LinearLayout;
     
  15. import android.widget.ScrollVIEw;
     
  16. import android.widget.TextVIEw;
     
  17. /**
     
  18. * 本例子將記錄可靜態注冊的廣播被監聽到的頻度。<br/>
     
  19. * 1.建立一表{ACTION_NAME廣播名稱,LAST_TIME最近一次發生時間,COUNT總共記錄到的次數}<br/>
     
  20. * 2.在ActionReceiver中監聽廣播,並記錄。 <br/>
     
  21. * 3.在DBContentProvider中更新數據庫記錄<br/>
     
  22. * 4.在BroadcastActionRecordAct.ActionDBObserver中監聽數據庫的變化,
     
  23. * 並使用Handler機制將最新情況顯示在txtInfo上。<br/>
     
  24. * 5.DatabaSEOpenHelper將實現基本的數據庫操作。
     

  25.  
  26. * @author Sodino
     
  27. */
     
  28. public class BroadcastActionRecordAct extends Activity implements
     
  29.                 Button.OnClickListener {
     
  30.         private TextVIEw txtInfo;
     
  31.         private DatabaSEOpenHelper dbHelper;
     
  32.         private Button btnRefresh;
     
  33.         /** clear功能未完善。 */
     
  34.         private Button btnClear;
     
  35.         private Handler handler = new Handler() {
     
  36.                 public void handleMessage(Message msg) {
     
  37.                         String info = (String) msg.obj;
     
  38.                         txtInfo.setText(info);
     
  39.                 }
     
  40.         };
     
  41.         @Override
     
  42.         public void onCreate(Bundle savedInstanceState) {
     
  43.                 super.onCreate(savedInstanceState);
     
  44.                 LayoutParams lpPC = new LayoutParams(LayoutParams.FILL_PARENT,
     
  45.                                 LayoutParams.WRAP_CONTENT);
     
  46.                 LayoutParams lpCC = new LayoutParams(LayoutParams.WRAP_CONTENT,
     
  47.                                 LayoutParams.WRAP_CONTENT);
     
  48.                 btnRefresh = new Button(this);
     
  49.                 btnRefresh.setLayoutParams(lpCC);
     
  50.                 btnRefresh.setText("Refresh");
     
  51.                 btnRefresh.setOnClickListener(this);
     
  52.                 btnClear = new Button(this);
     
  53.                 btnClear.setLayoutParams(lpCC);
     
  54.                 btnClear.setText("ClearTable");
     
  55.                 btnClear.setOnClickListener(this);
     
  56.                 LinearLayout subLayout = new LinearLayout(this);
     
  57.                 subLayout.setLayoutParams(lpPC);
     
  58.                 subLayout.setOrIEntation(LinearLayout.HORIZONTAL);
     
  59.                 subLayout.addVIEw(btnRefresh);
     
  60.                 subLayout.addVIEw(btnClear);
     
  61.                 txtInfo = new TextVIEw(this);
     
  62.                 txtInfo.setLayoutParams(lpPC);
     
  63.                 txtInfo.setTextColor(0xff0000ff);
     
  64.                 txtInfo.setBackgroundColor(0xffffffff);
     
  65.                 txtInfo.setText("Starting...");
     
  66.                 txtInfo.setTextSize(15);
     
  67.                 ScrollView scrollView = new ScrollVIEw(this);
     
  68.                 scrollVIEw.setLayoutParams(lpPC);
     
  69.                 scrollView.addVIEw(txtInfo);
     
  70.                 LinearLayout mainLayout = new LinearLayout(this);
     
  71.                 mainLayout.setLayoutParams(lpPC);
     
  72.                 mainLayout.setOrIEntation(LinearLayout.VERTICAL);
     
  73.                 mainLayout.addVIEw(subLayout);
     
  74.                 mainLayout.addView(scrollVIEw);
     
  75.                 setContentVIEw(mainLayout);
     
  76.                 dbHelper = new DatabaSEOpenHelper(this);
     
  77.                 ContentResolver contentResolver = getContentResolver();
     
  78.                 contentResolver.registerContentObserver(DBContentProvider.CONTENT_URI,
     
  79.                                 false, new ActionDBObserver(handler));
     
  80.         }
     
  81.         public void onClick(View vIEw) {
     
  82.                 if (vIEw == btnRefresh) {
     
  83.                         refreshRecord();
     
  84.                 } else if (vIEw == btnClear) {
     
  85.                         clearRecord();
     
  86.                 }
     
  87.         }
     
  88.         public void refreshRecord() {
     
  89.                 dbHelper.openReadableDatabase();
     
  90.                 String info = dbHelper.getAllOrderedList(DatabaSEOpenHelper.DESC);
     
  91.                 dbHelper.close();
     
  92.                 if (info != null) {
     
  93.                         txtInfo.setText(info);
     
  94.                 } else {
     
  95.                         txtInfo.setText("<NULL/>");
     
  96.                 }
     
  97.                 dbHelper.close();
     
  98.         }
     
  99.         public void clearRecord() {
     
  100.                 dbHelper.openWritableDatabase();
     
  101.                 dbHelper.clearRecord();
     
  102.                 dbHelper.close();
     
  103.         }
     
  104.         private class ActionDBObserver extends ContentObserver {
     
  105.                 private Handler handler;
     
  106.                 public ActionDBObserver(Handler handler) {
     
  107.                         super(handler);
     
  108.                         this.handler = handler;
     
  109.                 }
     
  110.                 public void onChange(boolean selfChange) {
     
  111.                         super.onChange(selfChange);
     
  112.                         String[] projection = { "ACTION_NAME", "LAST_TIME", "COUNT" };
     
  113.                         // String selection = "select * from ActionTable";
     
  114.                         String sortOrder = "COUNT DESC";
     
  115.                         // dbHelper.openReadableDatabase();
     
  116.                         // Cursor cursor = dbHelper.query(projection, null, null,
     
  117.                         // sortOrder);
     
  118.                         Cursor cursor = managedQuery(DBContentProvider.CONTENT_URI,
     
  119.                                         projection, null, null, sortOrder);
     
  120.                         String info = "";
     
  121.                         String line = "";
     
  122.                         int actionIdx = 0;
     
  123.                         int timeIdx = 1;
     
  124.                         int countIdx = 2;
     
  125.                         while (cursor.moveToNext()) {
     
  126.                                 line += cursor.getString(actionIdx) + " ";
     
  127.                                 line += cursor.getString(timeIdx) + " ";
     
  128.                                 line += cursor.getString(countIdx) + "\n";
     
  129.                                 info += line;
     
  130.                                 line = "";
     
  131.                         }
     
  132.                         Message msg = new Message();
     
  133.                         msg.obj = info;
     
  134.                         handler.sendMessage(msg);
     
  135.                         cursor.close();
     
  136.                         // dbHelper.close();
     
  137.                         SodinoOut.out("Database does changed!!!");
     
  138.                 }
     
  139.                 public boolean deliverSelfNotifications() {
     
  140.                         return super.deliverSelfNotifications();
     
  141.                 }
     
  142.         }
     
  143. }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved