A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© y1787257661 中级黑马   /  2015-1-8 19:31  /  983 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /**
  2. * 本例子将记录可静态注册的广播被监听到的频度。<br/>
  3. * 1.建立一表{ACTION_NAME广播名称,LAST_TIME最近一次发生时间,COUNT总共记录到的次数}<br/>
  4. * 2.在ActionReceiver中监听广播,并记录。 <br/>
  5. * 3.在DBContentProvider中更新数据库记录<br/>
  6. * 4.在BroadcastActionRecordAct.ActionDBObserver中监听数据库的变化,
  7. * 并使用Handler机制将最新情况显示在txtInfo上。<br/>
  8. * 5.DatabaseOpenHelper将实现基本的数据库操作。
  9. *
  10. * @author Sodino
  11. */
  12. public class BroadcastActionRecordAct extends Activity implements
  13.         Button.OnClickListener {
  14.     private TextView txtInfo;
  15.     private DatabaseOpenHelper dbHelper;
  16.     private Button btnRefresh;
  17.     /** clear功能未完善。 */
  18.     private Button btnClear;
  19.     private Handler handler = new Handler() {
  20.         public void handleMessage(Message msg) {
  21.             String info = (String) msg.obj;
  22.             txtInfo.setText(info);
  23.         }
  24.     };
  25.     @Override
  26.     public void onCreate(Bundle savedInstanceState) {
  27.         super.onCreate(savedInstanceState);
  28.         LayoutParams lpPC = new LayoutParams(LayoutParams.FILL_PARENT,
  29.                 LayoutParams.WRAP_CONTENT);
  30.         LayoutParams lpCC = new LayoutParams(LayoutParams.WRAP_CONTENT,
  31.                 LayoutParams.WRAP_CONTENT);
  32.         btnRefresh = new Button(this);
  33.         btnRefresh.setLayoutParams(lpCC);
  34.         btnRefresh.setText("Refresh");
  35.         btnRefresh.setOnClickListener(this);
  36.         btnClear = new Button(this);
  37.         btnClear.setLayoutParams(lpCC);
  38.         btnClear.setText("ClearTable");
  39.         btnClear.setOnClickListener(this);
  40.         LinearLayout subLayout = new LinearLayout(this);
  41.         subLayout.setLayoutParams(lpPC);
  42.         subLayout.setOrientation(LinearLayout.HORIZONTAL);
  43.         subLayout.addView(btnRefresh);
  44.         subLayout.addView(btnClear);
  45.         txtInfo = new TextView(this);
  46.         txtInfo.setLayoutParams(lpPC);
  47.         txtInfo.setTextColor(0xff0000ff);
  48.         txtInfo.setBackgroundColor(0xffffffff);
  49.         txtInfo.setText("Starting...");
  50.         txtInfo.setTextSize(15);
  51.         ScrollView scrollView = new ScrollView(this);
  52.         scrollView.setLayoutParams(lpPC);
  53.         scrollView.addView(txtInfo);
  54.         LinearLayout mainLayout = new LinearLayout(this);
  55.         mainLayout.setLayoutParams(lpPC);
  56.         mainLayout.setOrientation(LinearLayout.VERTICAL);
  57.         mainLayout.addView(subLayout);
  58.         mainLayout.addView(scrollView);
  59.         setContentView(mainLayout);
  60.         dbHelper = new DatabaseOpenHelper(this);
  61.         ContentResolver contentResolver = getContentResolver();
  62.         contentResolver.registerContentObserver(DBContentProvider.CONTENT_URI,
  63.                 false, new ActionDBObserver(handler));
  64.     }
  65.     public void onClick(View view) {
  66.         if (view == btnRefresh) {
  67.             refreshRecord();
  68.         } else if (view == btnClear) {
  69.             clearRecord();
  70.         }
  71.     }
  72.     public void refreshRecord() {
  73.         dbHelper.openReadableDatabase();
  74.         String info = dbHelper.getAllOrderedList(DatabaseOpenHelper.DESC);
  75.         dbHelper.close();
  76.         if (info != null) {
  77.             txtInfo.setText(info);
  78.         } else {
  79.             txtInfo.setText("<NULL/>");
  80.         }
  81.         dbHelper.close();
  82.     }
  83.     public void clearRecord() {
  84.         dbHelper.openWritableDatabase();
  85.         dbHelper.clearRecord();
  86.         dbHelper.close();
  87.     }
  88.     private class ActionDBObserver extends ContentObserver {
  89.         private Handler handler;
  90.         public ActionDBObserver(Handler handler) {
  91.             super(handler);
  92.             this.handler = handler;
  93.         }
  94.         public void onChange(boolean selfChange) {
  95.             super.onChange(selfChange);
  96.             String[] projection = { "ACTION_NAME", "LAST_TIME", "COUNT" };
  97.             // String selection = "select * from ActionTable";
  98.             String sortOrder = "COUNT DESC";
  99.             // dbHelper.openReadableDatabase();
  100.             // Cursor cursor = dbHelper.query(projection, null, null,
  101.             // sortOrder);
  102.             Cursor cursor = managedQuery(DBContentProvider.CONTENT_URI,
  103.                     projection, null, null, sortOrder);
  104.             String info = "";
  105.             String line = "";
  106.             int actionIdx = 0;
  107.             int timeIdx = 1;
  108.             int countIdx = 2;
  109.             while (cursor.moveToNext()) {
  110.                 line += cursor.getString(actionIdx) + " ";
  111.                 line += cursor.getString(timeIdx) + " ";
  112.                 line += cursor.getString(countIdx) + "/n";
  113.                 info += line;
  114.                 line = "";
  115.             }
  116.             Message msg = new Message();
  117.             msg.obj = info;
  118.             handler.sendMessage(msg);
  119.             cursor.close();
  120.             // dbHelper.close();
  121.             SodinoOut.out("Database does changed!!!");
  122.         }
  123.         public boolean deliverSelfNotifications() {
  124.             return super.deliverSelfNotifications();
  125.         }
  126.     }
  127. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马