Android(java)学习笔记197:ContentProvider使用之内容观察者02

下面通过3个应用程序之间的交互说明一下内容观察者

一、 如下3个应用程序为相互交互的:

 

二、交互逻辑图:

 

三、具体代码:

1.   16_数据库工程:

 

(1)数据库帮助类BankDBOpenHelper(继承自SQLiteOpenHelper):

 1 package com.itheima.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 6 import android.database.sqlite.SQLiteOpenHelper;
 7 
 8 /**
 9  * 银行数据库打开的帮助类
10  * @author Administrator
11  *
12  */
13 public class BankDBOpenHelper extends SQLiteOpenHelper {
14 
15     public BankDBOpenHelper(Context context) {
16         super(context, "bank.db", null, 1);
17     }
18     //数据库第一次被创建调用的方法,适合做数据库表结构的初始化
19     @Override
20     public void onCreate(SQLiteDatabase db) {
21         db.execSQL("create table account (_id integer primary key autoincrement,name varchar(20),money varchar(2))");
22     }
23     //数据库版本更新的时候调用的方法
24     @Override
25     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
26         
27     }
28 }

(2)操作数据库的工具类BankDBDao,如下:

  1 package com.itheima.db.dao;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 import android.content.ContentValues;
  9 import android.content.Context;
 10 import android.database.Cursor;
 11 import android.database.sqlite.SQLiteDatabase;
 12 
 13 import com.itheima.db.BankDBOpenHelper;
 14 
 15 /**
 16  * 银行数据库的data access object
 17  */
 18 public class BankDBDao {
 19     private BankDBOpenHelper helper;
 20     public BankDBDao(Context context) {
 21         helper = new BankDBOpenHelper(context);
 22     }
 23     /**
 24      * 添加一条账户信息
 25      * @param name 姓名
 26      * @param money 钱
 27      * @return 代表添加在数据库的行号id 如果返回-1代表添加失败,用户已经存在
 28      */
 29     public long add(String name,float money){
 30         if(isUserExist(name)){
 31             return -1;
 32         }
 33         SQLiteDatabase db = helper.getWritableDatabase();
 34         ContentValues values = new ContentValues();
 35         values.put("name", name);
 36         values.put("money", money);
 37         long rowID = db.insert("account", null, values);
 38         db.close();
 39         return rowID;
 40     }
 41     /**
 42      * 删除一条数据库的记录
 43      * @param name
 44      * @return 是否删除成功
 45      */
 46     public boolean delete(String name){
 47         SQLiteDatabase db = helper.getWritableDatabase();
 48         int result = db.delete("account", "name=?", new String[]{name});
 49         db.close();
 50         if(result>0){
 51             return true;
 52         }else{
 53             return false;
 54         }
 55     }
 56     /**
 57      * 修改用户的账户信息
 58      * @param name 要修改储户的姓名
 59      * @param money 新的账户余额
 60      * @return 是否修改成功
 61      */
 62     public boolean update(String name,float money){
 63         SQLiteDatabase db = helper.getWritableDatabase();
 64         ContentValues values = new ContentValues();
 65         values.put("money", money);
 66         int result = db.update("account", values, "name=?", new String[]{name});
 67         db.close();
 68         if(result>0){
 69             return true;
 70         }else{
 71             return false;
 72         }
 73     }
 74     /**
 75      * 查询某个用户有多少钱
 76      * @param name
 77      * @return
 78      */
 79     public float getUserMoney(String name){
 80         float money = 0;
 81         SQLiteDatabase db = helper.getReadableDatabase();
 82         Cursor cursor = db.query("account", new String[]{"money"}, "name=?", new String[]{name}, null, null, null);
 83         if(cursor.moveToNext()){
 84             money = cursor.getFloat(0);
 85         }cursor.close();
 86         db.close();
 87         return money;
 88     }
 89     
 90     /**
 91      * 查询某个用户是否存在
 92      * @param name
 93      * @return 
 94      */
 95     public boolean isUserExist(String name){
 96         boolean result = false;
 97         SQLiteDatabase db = helper.getReadableDatabase();
 98         Cursor cursor = db.query("account", null, "name=?", new String[]{name}, null, null, null);
 99         if(cursor.moveToNext()){
100             result = true;
101         }cursor.close();
102         db.close();
103         return result;
104     }
105     /**
106      * 返回所有的储户信息
107      * @return
108      */
109     public List<Map<String,Object>> findAllUser(){
110         List<Map<String,Object>> allUsers = new ArrayList<Map<String,Object>>();
111         SQLiteDatabase db = helper.getReadableDatabase();
112         Cursor cursor = db.query("account", new String[]{"_id","name","money"}, null,null, null, null, null);
113         while(cursor.moveToNext()){
114             Map<String,Object> user = new HashMap<String, Object>();
115             user.put("_id", cursor.getInt(0));
116             user.put("name", cursor.getString(1));
117             user.put("money", cursor.getFloat(2));
118             allUsers.add(user);
119         }
120         cursor.close();
121         db.close();
122         return allUsers;
123     }
124 }

(3)内容提供者类BankInfoProvider,如下:

  1 package com.itheima.db.provider;
  2 
  3 import com.itheima.db.BankDBOpenHelper;
  4 import com.itheima.db.dao.BankDBDao;
  5 
  6 import android.content.ContentProvider;
  7 import android.content.ContentValues;
  8 import android.content.UriMatcher;
  9 import android.database.Cursor;
 10 import android.database.sqlite.SQLiteDatabase;
 11 import android.net.Uri;
 12 
 13 /**
 14  * 银行内部的内线, 用来提供数据(双重间谍 15  */
 16 public class BankInfoProvider extends ContentProvider {
 17     private static final int ACCOUNT = 1;
 18     private static final int SINGLE_ACCOUNT = 2;
 19     private BankDBOpenHelper helper;
 20     // 定义一个uri的匹配器 ,识别器
 21     private static UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
 22     static {
 23         // 训练匹配器
 24         mUriMatcher.addURI("com.itheima.db", "account", ACCOUNT);
 25         // content://com.itheima.db/account 访问accout表里面的全部数据
 26         // content://com.itheima.db/account/8 访问accout表里面的第8条数据
 27         mUriMatcher.addURI("com.itheima.db", "account/#", SINGLE_ACCOUNT);
 28     }
 29 
 30     @Override
 31     public boolean onCreate() {
 32         helper = new BankDBOpenHelper(getContext());
 33         return false;
 34     }
 35 
 36     // 查询的方法
 37     @Override
 38     public Cursor query(Uri uri, String[] columns, String selection,
 39             String[] selectionArgs, String sortOrder) {
 40         int code = mUriMatcher.match(uri);
 41         if (code == ACCOUNT) {
 42             SQLiteDatabase db = helper.getReadableDatabase();
 43             Cursor cursor = db.query("account", columns, selection,
 44                     selectionArgs, null, null, null);
 45             return cursor;
 46         } else {
 47             throw new IllegalArgumentException("根据法律规定,你无权查看数据。");
 48         }
 49     }
 50 
 51     // vnd.android.cursor.item 单条记录
 52     // vnd.android.cursor.dir 多条记录
 53     @Override
 54     public String getType(Uri uri) {
 55         int result = mUriMatcher.match(uri);
 56         if (result == ACCOUNT) {
 57             // 多条记录
 58             return "vnd.android.cursor.dir/account";
 59         } else if (result == SINGLE_ACCOUNT) {
 60             // 单条记录
 61             return "vnd.android.cursor.item/account";
 62         }
 63         return null;
 64     }
 65 
 66     @Override
 67     public Uri insert(Uri uri, ContentValues values) {
 68         int code = mUriMatcher.match(uri);
 69         if (code == ACCOUNT) {
 70             SQLiteDatabase db = helper.getWritableDatabase();
 71             long id = db.insert("account", null, values);
 72             db.close();
 73             //后面程序,通知这个uri的数据变化了
 74             getContext().getContentResolver().notifyChange(uri, null);
 75             return Uri.parse("content://com.itheima.db/account/" + id);
 76         } else {
 77             throw new IllegalArgumentException("根据法律规定,你无权添加数据。");
 78         }
 79     }
 80 
 81     @Override
 82     public int delete(Uri uri, String selection, String[] selectionArgs) {
 83         int code = mUriMatcher.match(uri);
 84         if (code == ACCOUNT) {
 85             SQLiteDatabase db = helper.getWritableDatabase();
 86             int result = db.delete("account", selection, selectionArgs);
 87             db.close();
 88             //后面程序,通知这个uri的数据变化了
 89             getContext().getContentResolver().notifyChange(uri, null);
 90             return result;
 91         } else {
 92             throw new IllegalArgumentException("根据法律规定,你无权删除数据。");
 93         }
 94     }
 95 
 96     @Override
 97     public int update(Uri uri, ContentValues values, String selection,
 98             String[] selectionArgs) {
 99         int code = mUriMatcher.match(uri);
100         if (code == ACCOUNT) {
101             SQLiteDatabase db = helper.getWritableDatabase();
102             int result = db.update("account", values, selection, selectionArgs);
103             db.close();
104             //后面程序,通知这个uri的数据变化了
105             getContext().getContentResolver().notifyChange(uri, null);
106             return result;
107         } else {
108             throw new IllegalArgumentException("根据法律规定,你无权修改数据。");
109         }
110     }
111 
112 }

在上面insert()、delete()、update()方法中,我们都有:getContext().getContentResolver().notifyChange(uri, null);

这个方法就是发送数据库发生改变的消息(Handler)公共内存

 

(4)在AndroidMainfest.xml文件中注册内容提供者,并注明主机名android:authorities

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.itheima.db"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:targetSdkVersion="17" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.itheima.db.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25 
26         <provider
27             android:name="com.itheima.db.provider.BankInfoProvider"
28             android:authorities="com.itheima.db" >
29         </provider>
30     </application>
31 
32 </manifest>

 

(5)在MainActivity初始化数据库,如下:

 1 package com.itheima.db;
 2 
 3 import java.util.Random;
 4 
 5 import com.itheima.db.dao.BankDBDao;
 6 
 7 import android.os.Bundle;
 8 import android.app.Activity;
 9 import android.view.Menu;
10 
11 public class MainActivity extends Activity {
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         BankDBDao dao = new BankDBDao(this);
18         Random random = new Random();
19         for(int i =0;i<20;i++){
20              dao.add("张"+i, random.nextFloat()+random.nextInt(500));
21         }
22     }
23 
24     
25 }

 

2. 17_银行行长工程:

(1)工程如下图:

 

(2)先设置一下UI布局如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context=".MainActivity" >
 7 
 8     <Button
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:onClick="query"
12         android:text="查询银行的数据库信息" />
13 
14     <Button
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:onClick="add"
18         android:text="添加一条储户信息" />
19 
20     <Button
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content"
23         android:onClick="delete"
24         android:text="删除一条储户信息" />
25 
26     <Button
27         android:layout_width="match_parent"
28         android:layout_height="wrap_content"
29         android:onClick="update"
30         android:text="修改一条储户信息" />
31 
32 </LinearLayout>

布局效果如下:

 

(3)来到MainActivity,如下:

 1 package com.itheima.bankboss;
 2 
 3 import android.app.Activity;
 4 import android.content.ContentResolver;
 5 import android.content.ContentValues;
 6 import android.database.Cursor;
 7 import android.net.Uri;
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.widget.Toast;
11 
12 public class MainActivity extends Activity {
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18     }
19     /**
20      * 银行行长查询私有的数据库信息
21      * @param view
22      */
23     public void query(View view){
24         //得到内容提供者的解析器
25         ContentResolver resolver = getContentResolver();
26         Uri uri = Uri.parse("content://com.itheima.db/account");
27         Cursor cursor = resolver.query(uri, null, null, null, null);
28         while(cursor.moveToNext()){
29             String id = cursor.getString(0);
30             String name = cursor.getString(1);
31             String money = cursor.getString(2);
32             System.out.println(id);
33             System.out.println(name);
34             System.out.println(money);
35         }
36         cursor.close();
37     }
38     /**
39      * 通过内容提供者 ,向银行私有的数据库添加一条记录
40      * @param view
41      */
42     public void add(View view){
43         ContentResolver resolver = getContentResolver();
44         Uri uri = Uri.parse("content://com.itheima.db/account");
45         ContentValues values = new ContentValues();
46         values.put("name", "王五");
47         values.put("money", 1000000.23f);
48         Uri result  = resolver.insert(uri, values);
49         Toast.makeText(this, result.toString(), 0).show();
50     }
51     
52     public void delete(View view){
53         ContentResolver resolver = getContentResolver();
54         Uri uri = Uri.parse("content://com.itheima.db/account");
55         int result = resolver.delete(uri, "name=?", new String[]{"王五"});
56         if(result>0){
57             Toast.makeText(this, "删除成功", 0).show();
58         }else{
59             Toast.makeText(this, "删除失败", 0).show();
60         }
61     }
62     public void update(View view){
63         ContentResolver resolver = getContentResolver();
64         Uri uri = Uri.parse("content://com.itheima.db/account");
65         ContentValues values = new ContentValues();
66         values.put("money", 0.05f);
67         int result = resolver.update(uri, values, "name=?", new String[]{"王五"});
68         if(result>0){
69             Toast.makeText(this, "修改成功", 0).show();
70         }else{
71             Toast.makeText(this, "修改失败", 0).show();
72         }
73     }
74 }

清单文件AndroidMainfest.xml,如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.itheima.bankboss"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:targetSdkVersion="17" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.itheima.bankboss.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25     </application>
26 
27 </manifest>

 

 

3. 18_其他的应用

(1)工程一览图,如下:

 

(2)布局文件,清单文件AndroidMainfest.xml两者不做修改,只修改MainActivity,如下:

 1 package com.itheima.other;
 2 
 3 import android.net.Uri;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.app.Activity;
 7 import android.database.ContentObserver;
 8 import android.view.Menu;
 9 
10 public class MainActivity extends Activity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16         Uri uri = Uri.parse("content://com.itheima.db/account");
17         getContentResolver().registerContentObserver(uri, true, new MyObserver(new Handler()));
18     }
19 
20    //自定义一个内容观察者
21     private class MyObserver extends ContentObserver{
22 
23         public MyObserver(Handler handler) {
24             super(handler);
25         }
26         //这个方法在当内容变化的时候调用。 回调函数。
27         @Override
28         public void onChange(boolean selfChange) {
29             System.out.println("哈哈,你被我抓住了,银行的数据库发生了变化。");
30             super.onChange(selfChange);
31         }
32         
33     }
34 }

备注:registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)

参数uri:待检测资源文件是否改变的路径uri;

参数notifyForDescendents: true (只有uri前缀匹配,也可以检测资源文件是否改变), false(表示uri完全匹配,才能检测资源文件是否改变);

参数observer:定义的内容观察者;

这里代码中自定义一个内容观察者,当他获取到公共内存的消息(使用消息机制),这个消息内容就是16_数据库 发送给公共内存的消息的。

在自定义的内容观察者内部重写的onChange()方法,这个方法很重要的,主要是得知数据库内容修改了,执行代码。这个代码主要是提示用户的。

 

4. 上面三个应用全部布署到模拟器上,如下:

(1)三个程序都运行起来,先点击进入 17_银行行长 ,如下图:

 

(2)点击 "查询银行数据库信息",同时观察logcat打印的日志,如下:

09-15 06:10:08.923: I/System.out(2352): 1
09-15 06:10:08.923: I/System.out(2352): 王五
09-15 06:10:08.923: I/System.out(2352): 1000000.25
09-15 06:10:08.933: I/System.out(2352): 2
09-15 06:10:08.933: I/System.out(2352): 张0
09-15 06:10:08.933: I/System.out(2352): 382.509613037109
09-15 06:10:08.943: I/System.out(2352): 3
09-15 06:10:08.953: I/System.out(2352): 张1
09-15 06:10:08.953: I/System.out(2352): 333.448028564453
09-15 06:10:08.953: I/System.out(2352): 4
09-15 06:10:08.953: I/System.out(2352): 张2
09-15 06:10:08.953: I/System.out(2352): 151.61848449707
09-15 06:10:08.953: I/System.out(2352): 5
09-15 06:10:08.953: I/System.out(2352): 张3
09-15 06:10:08.953: I/System.out(2352): 478.295715332031
09-15 06:10:08.953: I/System.out(2352): 6
09-15 06:10:08.953: I/System.out(2352): 张4
09-15 06:10:08.953: I/System.out(2352): 171.737258911133
09-15 06:10:08.953: I/System.out(2352): 7
09-15 06:10:08.953: I/System.out(2352): 张5
09-15 06:10:08.953: I/System.out(2352): 360.500274658203
09-15 06:10:08.963: I/System.out(2352): 8
09-15 06:10:08.963: I/System.out(2352): 张6
09-15 06:10:08.963: I/System.out(2352): 454.060882568359
09-15 06:10:08.963: I/System.out(2352): 9
09-15 06:10:08.963: I/System.out(2352): 张7
09-15 06:10:08.963: I/System.out(2352): 238.111083984375
09-15 06:10:08.963: I/System.out(2352): 10
09-15 06:10:08.963: I/System.out(2352): 张8
09-15 06:10:08.963: I/System.out(2352): 189.068878173828
09-15 06:10:08.963: I/System.out(2352): 11
09-15 06:10:08.963: I/System.out(2352): 张9
09-15 06:10:08.963: I/System.out(2352): 251.897613525391
09-15 06:10:08.963: I/System.out(2352): 12
09-15 06:10:08.963: I/System.out(2352): 张10
09-15 06:10:08.963: I/System.out(2352): 163.039077758789
09-15 06:10:08.983: I/System.out(2352): 13
09-15 06:10:08.983: I/System.out(2352): 张11
09-15 06:10:08.983: I/System.out(2352): 406.003662109375
09-15 06:10:08.983: I/System.out(2352): 14
09-15 06:10:08.983: I/System.out(2352): 张12
09-15 06:10:08.983: I/System.out(2352): 188.824310302734
09-15 06:10:08.983: I/System.out(2352): 15
09-15 06:10:08.983: I/System.out(2352): 张13
09-15 06:10:08.993: I/System.out(2352): 352.776428222656
09-15 06:10:08.993: I/System.out(2352): 16
09-15 06:10:08.993: I/System.out(2352): 张14
09-15 06:10:08.993: I/System.out(2352): 467.630920410156
09-15 06:10:08.993: I/System.out(2352): 17
09-15 06:10:08.993: I/System.out(2352): 张15
09-15 06:10:08.993: I/System.out(2352): 398.476989746094
09-15 06:10:08.993: I/System.out(2352): 18
09-15 06:10:08.993: I/System.out(2352): 张16
09-15 06:10:08.993: I/System.out(2352): 130.809677124023
09-15 06:10:08.993: I/System.out(2352): 19
09-15 06:10:08.993: I/System.out(2352): 张17
09-15 06:10:08.993: I/System.out(2352): 327.802581787109
09-15 06:10:08.993: I/System.out(2352): 20
09-15 06:10:08.993: I/System.out(2352): 张18
09-15 06:10:08.993: I/System.out(2352): 232.474548339844
09-15 06:10:09.133: I/System.out(2352): 21
09-15 06:10:09.133: I/System.out(2352): 张19
09-15 06:10:09.143: I/System.out(2352): 143.222579956055

 

(3)多次点击 "添加一条储户信息",同时观察logcat打印的日志,如下:

 

这个时候logcat(System.out)也出现多条日志,如下:

09-15 06:11:39.943: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:11:49.983: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:11:53.863: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:12:11.973: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。

 

 

(4)这个时候我们点击"查询银行的数据库信息",观察logcat(System.out)打印的日志如下:

09-15 06:11:39.943: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:11:49.983: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:11:53.863: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:12:11.973: I/System.out(2337): 哈哈,你被我抓住了,银行的数据库发生了变化。
09-15 06:14:17.773: I/System.out(2352): 1
09-15 06:14:17.773: I/System.out(2352): 王五
09-15 06:14:17.773: I/System.out(2352): 1000000.25
09-15 06:14:17.783: I/System.out(2352): 2
09-15 06:14:17.803: I/System.out(2352): 张0
09-15 06:14:17.803: I/System.out(2352): 382.509613037109
09-15 06:14:17.803: I/System.out(2352): 3
09-15 06:14:17.803: I/System.out(2352): 张1
09-15 06:14:17.823: I/System.out(2352): 333.448028564453
09-15 06:14:17.823: I/System.out(2352): 4
09-15 06:14:17.823: I/System.out(2352): 张2
09-15 06:14:17.833: I/System.out(2352): 151.61848449707
09-15 06:14:17.843: I/System.out(2352): 5
09-15 06:14:17.843: I/System.out(2352): 张3
09-15 06:14:17.843: I/System.out(2352): 478.295715332031
09-15 06:14:17.843: I/System.out(2352): 6
09-15 06:14:17.843: I/System.out(2352): 张4
09-15 06:14:17.843: I/System.out(2352): 171.737258911133
09-15 06:14:17.843: I/System.out(2352): 7
09-15 06:14:17.843: I/System.out(2352): 张5
09-15 06:14:17.843: I/System.out(2352): 360.500274658203
09-15 06:14:17.893: I/System.out(2352): 8
09-15 06:14:17.893: I/System.out(2352): 张6
09-15 06:14:17.893: I/System.out(2352): 454.060882568359
09-15 06:14:17.893: I/System.out(2352): 9
09-15 06:14:17.893: I/System.out(2352): 张7
09-15 06:14:17.893: I/System.out(2352): 238.111083984375
09-15 06:14:17.903: I/System.out(2352): 10
09-15 06:14:17.903: I/System.out(2352): 张8
09-15 06:14:17.903: I/System.out(2352): 189.068878173828
09-15 06:14:17.913: I/System.out(2352): 11
09-15 06:14:17.913: I/System.out(2352): 张9
09-15 06:14:17.913: I/System.out(2352): 251.897613525391
09-15 06:14:17.913: I/System.out(2352): 12
09-15 06:14:17.913: I/System.out(2352): 张10
09-15 06:14:17.913: I/System.out(2352): 163.039077758789
09-15 06:14:17.923: I/System.out(2352): 13
09-15 06:14:17.923: I/System.out(2352): 张11
09-15 06:14:17.923: I/System.out(2352): 406.003662109375
09-15 06:14:17.923: I/System.out(2352): 14
09-15 06:14:17.923: I/System.out(2352): 张12
09-15 06:14:17.923: I/System.out(2352): 188.824310302734
09-15 06:14:17.923: I/System.out(2352): 15
09-15 06:14:17.923: I/System.out(2352): 张13
09-15 06:14:17.933: I/System.out(2352): 352.776428222656
09-15 06:14:17.933: I/System.out(2352): 16
09-15 06:14:17.933: I/System.out(2352): 张14
09-15 06:14:17.933: I/System.out(2352): 467.630920410156
09-15 06:14:17.943: I/System.out(2352): 17
09-15 06:14:17.943: I/System.out(2352): 张15
09-15 06:14:17.943: I/System.out(2352): 398.476989746094
09-15 06:14:17.958: I/System.out(2352): 18
09-15 06:14:17.958: I/System.out(2352): 张16
09-15 06:14:17.963: I/System.out(2352): 130.809677124023
09-15 06:14:17.963: I/System.out(2352): 19
09-15 06:14:17.963: I/System.out(2352): 张17
09-15 06:14:17.963: I/System.out(2352): 327.802581787109
09-15 06:14:17.963: I/System.out(2352): 20
09-15 06:14:17.963: I/System.out(2352): 张18
09-15 06:14:17.963: I/System.out(2352): 232.474548339844
09-15 06:14:17.988: I/System.out(2352): 21
09-15 06:14:17.993: I/System.out(2352): 张19
09-15 06:14:17.993: I/System.out(2352): 143.222579956055
09-15 06:14:17.993: I/System.out(2352): 22
09-15 06:14:17.993: I/System.out(2352): 王五
09-15 06:14:17.993: I/System.out(2352): 1000000.25
09-15 06:14:17.993: I/System.out(2352): 23
09-15 06:14:17.993: I/System.out(2352): 王五
09-15 06:14:17.993: I/System.out(2352): 1000000.25
09-15 06:14:17.993: I/System.out(2352): 24
09-15 06:14:17.993: I/System.out(2352): 王五
09-15 06:14:18.004: I/System.out(2352): 1000000.25
09-15 06:14:18.004: I/System.out(2352): 25
09-15 06:14:18.004: I/System.out(2352): 王五
09-15 06:14:18.004: I/System.out(2352): 1000000.25

红色的是我们添加的数据,说明插入数据,修改了数据库,确实 18_其他的应用  也检测到了数据库的变化。

posted on 2015-09-15 14:19  鸿钧老祖  阅读(256)  评论(0编辑  收藏  举报

导航