共用參數ContentProvider 類與資料庫綁定,如何通過共用參數測試類別,測試資料庫的增刪改查功能

來源:互聯網
上載者:User

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


}


}

 

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

/**測試其它應用程式的資料

 *     首Crowdsourced Security Testing道其它程式的共用參數,這個是繼承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"), null, null, null, null);

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)});

}

 

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.