当前位置:操作系统 > 安卓/Android >>

共享参数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, null, null, null, null);

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模式下,

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,