• 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能


    Intent可以传一个对象

     当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下:

    定义一个静态常量作为key

    public final static String SER_KEY="com.xiaoshu.worker";

    Intent intent=new Intent();

    intent.setClass(WorkerActivity.this,DisplayWorker.class);

    Bundle bundle = new Bundle();

    bundle.putSerializable(SER_KEY, worker);

    intent.putExtras(bundle);

    startActivity(intent);

    在另一个界面,接收通过intent传递过来的对象。接收方法如下

    Worker worker = (Worker) getIntent().getSerializableExtra(WorkerActivity.SER_KEY);

    /**

     * 1.建一个类MyProvide ,继承ContentProvider ,实现四个方法,需要注册。在activity中调用。

     * 注册如下: 

    <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>

     * 

     * 2.通过一个监听按钮获得MyProvide 解析器在另一个MainActivity 中。

     *ContentResolver   resolver=MainActivity.this.getContentResolver();//监听时,获取共享数据,一个查询一个插入

     *Uri  uri=Uri.parse("content://www.android1.com.cn");//uri代表资源地址

     *resolver.query(uri,null,null,null);查询

     *ContentValues   values=new ContentValues();//插入放一个对象进去,因为insert方法需要传一个values值。

     *resolver.insert(uri,values);

     *

    *******************执行数据库的操作MainActivity ************************

    public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button  button=(Button) findViewById(R.id.sss_sss);

    button.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

    //获得内容解析对象resolver,通过这个对象,对数据库进行操作

    ContentResolver   resolver=MainActivity.this.getContentResolver();

    Uri  uri=Uri.parse("content://www.android1.com.cn");

    resolver.query(uri, nullnullnullnull);

    ContentValues   values=new ContentValues();

    values.put("name""zhaoshan");

    resolver.insert(uri, values);

    }

    });

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.main, menu);

    return true;

    }

    }

    *******************************************************************************

    /*内提需要注册  <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>

     * 内容提供者和数据库绑定,其它程序不可记问本程序的数据库,但可以通过内容提代者访问数据库。

    */

    public class MyProvide extends ContentProvider {

    SQLiteDatabase db = null;

    @Override

    public boolean onCreate() {

    // 实例化数据库

    MyDBHelper helper = new MyDBHelper(this.getContext());

    db = helper.getWritableDatabase();

    return true;

    }

    @Override

    public Cursor query(Uri uri, String[] projection, String selection,

    String[] selectionArgs, String sortOrder) {

    // 查询数据库,返回一个游标值。

    return db.query("Users", projection, selection, selectionArgs, null,

    null, sortOrder);

    }

    @Override

    public Uri insert(Uri uri, ContentValues values) {

    db.insert("Users""_id", values);

    return uri;

    }

    @Override

    public int delete(Uri uri, String selection, String[] selectionArgs) {

    return db.delete("Users", selection, selectionArgs);

    }

    @Override

    public int update(Uri uri, ContentValues values, String selection,

    String[] selectionArgs) {

    int s = db.update("Users", values, selection, selectionArgs);

    return s;

    }

    @Override

    public String getType(Uri uri) {

    return null;

    }

    }

    //*************创建数据库szt**************************

    public class MyDBHelper extends SQLiteOpenHelper {

    public MyDBHelper(Context context) {

    super(context, "szt.db"null, 1);

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    // 创建一个数据表Users

    db.execSQL("create table Users(_id integer primary key autoincrement,name text)");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    // TODO Auto-generated method stub

    }

    }

    *******************************************************************************

    /**测试其它应用程序的数据

     *  首先知道其它程序的共享参数,这个是继承ContentProvider共享参数类的注册格式: 

     *  <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>

     * 1.TestMyProvide测试类首先在资源文件中添加权限在Instrumentation-->add---->name--->android.test.InstrumentationTestRunner

     *                                                 ---->Target package--->com.example.testprovider 包名

     * 2. 注册测试资源文件

     *  <application

            android:allowBackup="true"

            android:icon="@drawable/ic_launcher"

            android:label="@string/app_name"

            android:theme="@style/AppTheme" >

            <activity

                android:name="com.example.testprovider.MainActivity"

                android:label="@string/app_name" >

                <intent-filter>

                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

             <uses-library android:name="android.test.runner"/>//加入这个固定格式

        </application>                                              

     *

     *3.注册完后,本类,继承AndroidTestCase类,重写测试数据库的方法,方法名以test开头的。

     * 在outline模式下,出现TestMyProvide类下的五个方法setUp();

     *    testInsert();

     *    testQuery();

     *    testdelete();

     *    testUpdate();

     *    选中一个方法,点击右键--->Run As--->Android jUnit Test运行方法

     *    在MyProvide类下,在data--date--包名--导出数据库后,查看数据库

     */

    public class TestMyProvide extends AndroidTestCase {

    ContentResolver resolver = null;

    @Override

    protected void setUp() throws Exception {

    resolver  = this.getContext().getContentResolver();

    super.setUp();

    }

    public void testInsert(){

    ContentValues values = new ContentValues();

    values.put("name""wangchenghua");

    resolver.insert(Uri.parse("content://www.android1.com.cn"), values);

    Log.i("msg""wangchenghua");

    }

    public void testQuery(){

    Cursor c = resolver.query(Uri.parse("content://www.android1.com.cn"), nullnullnullnull);

    while(c.moveToNext()){

    Log.i("msg", c.getString(c.getColumnIndex("name")));

    }

    c.close();

    }

    public void testdelete(){

    resolver.delete(Uri.parse("content://www.android1.com.cn"), "_id = ?"new String[]{String.valueOf(1)});

    }

    public void testUpdate(){

    ContentValues values = new ContentValues();

    values.put("name""wangxiaoou");

    resolver.update(Uri.parse("content://www.android1.com.cn"), values, "_id = ?"new String[]{String.valueOf(4)});

    }

    }

  • 相关阅读:
    记录一次namespace 处于Terminating状态的处理方法
    Python的递归函数
    Rancher安装
    常用的正则
    Maven生命周期
    长春理工大学第十四届程序设计竞赛(重现赛)F
    长春理工大学第十四届程序设计竞赛(重现赛)B
    牛客假日团队赛1 B
    Codeforces Round #564 (Div. 2)B
    Codeforces Round #564 (Div. 2)A
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3165492.html
Copyright © 2020-2023  润新知