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