实验七 数据共享.docx
- 文档编号:8720757
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:19
- 大小:778.80KB
实验七 数据共享.docx
《实验七 数据共享.docx》由会员分享,可在线阅读,更多相关《实验七 数据共享.docx(19页珍藏版)》请在冰豆网上搜索。
实验七数据共享
步骤1.
1.采用数据库方式实现数据共享PeopleProvider功能,完善“ContentResolverDemo”功能,实现对PeopleProvider的调用在已有程序界面基础上,分步骤实现下述功能(注,通过改变AndroidManifest.xml文件,选择其中一个Acitivity有效启动):
采用数据库方式实现数据共享PeopleProvider功能:
●数据添加
●数据删除
●数据查询
●数据更新
ContentProvider(数据提供者)是在应用程序间共享数据的一种接口机制。
应用程序在不同的进程中运行,因此,数据和文件在不同应用程序之间是不能够直接访问的。
SharedPreferences和文件存储为跨越程序边界的访问提供了方法,但这些方法都有局限性。
ContentProvider提供了更为高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。
步骤2、
完善“ContentResolverDemo”功能,实现对PeopleProvider的调用
代码如下:
People.java文件的完整代码
packageedu.tjut.cs.contentResolverDemo;
import.Uri;
publicclassPeople{
publicstaticfinalStringMIME_DIR_PREFIX="vnd.android.cursor.dir";
publicstaticfinalStringMIME_ITEM_PREFIX="vnd.android.cursor.item";
publicstaticfinalStringMINE_ITEM="vnd.tjut.people";
publicstaticfinalStringMINE_TYPE_SINGLE=MIME_ITEM_PREFIX+"/"+MINE_ITEM;
publicstaticfinalStringMINE_TYPE_MULTIPLE=MIME_DIR_PREFIX+"/"+MINE_ITEM;
publicstaticfinalStringAUTHORITY="edu.tjut.cs.peopleprovider";
publicstaticfinalStringPATH_SINGLE="people/#";
publicstaticfinalStringPATH_MULTIPLE="people";
publicstaticfinalStringCONTENT_URI_STRING="content:
//"+AUTHORITY+"/"+PATH_MULTIPLE;
publicstaticfinalUriCONTENT_URI=Uri.parse(CONTENT_URI_STRING);
publicstaticfinalStringKEY_ID="_id";
publicstaticfinalStringKEY_NAME="name";
publicstaticfinalStringKEY_AGE="age";
publicstaticfinalStringKEY_HEIGHT="height";
}
PeopleProvider.java文件的完整代码
packageedu.tjut.cs.peopleProvider;
importandroid.content.ContentProvider;
importandroid.content.ContentUris;
importandroid.content.ContentValues;
importandroid.content.Context;
importandroid.content.UriMatcher;
importandroid.database.Cursor;
importandroid.database.SQLException;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
importandroid.database.sqlite.SQLiteQueryBuilder;
import.Uri;
publicclasspeopleProviderextendsContentProvider{
privatestaticfinalStringDB_NAME="people.db";
privatestaticfinalStringDB_TABLE="peopleinfo";
privatestaticfinalintDB_VERSION=1;
publicstaticfinalStringKEY_ID="_id";
publicstaticfinalStringKEY_NAME="name";
publicstaticfinalStringKEY_AGE="age";
publicstaticfinalStringKEY_HEIGHT="height";
privateSQLiteDatabasedb;
privateDBOpenHelperdbOpenHelper;
privatestaticfinalintMULTIPLE_PEOPLE=1;
privatestaticfinalintSINGLE_PEOPLE=2;
privatestaticfinalUriMatcheruriMatcher;
static{
uriMatcher=newUriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(People.AUTHORITY,People.PATH_MULTIPLE,MULTIPLE_PEOPLE);
uriMatcher.addURI(People.AUTHORITY,People.PATH_SINGLE,SINGLE_PEOPLE);
}
privatestaticclassDBOpenHelperextendsSQLiteOpenHelper{
publicDBOpenHelper(Contextcontext,Stringname,
CursorFactoryfactory,intversion){
super(context,name,factory,version);
//TODOAuto-generatedconstructorstub
}
privatestaticfinalStringDB_CREATE="createtable"+
DB_TABLE+"("+KEY_ID+"integerprimarykeyautoincrement,"+
KEY_NAME+"textnotnull,"+KEY_AGE+"integer,"+KEY_HEIGHT+"float);";
@Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
db.execSQL("createtablepeopleinfo(_idintegerprimarykeyautoincrement,nametextnotnull,ageinteger,heightfloat);");
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
db.execSQL("DROPTABLEIFEXISTS"+DB_TABLE);
onCreate(db);
}
}
@Override
publicintdelete(Uriarg0,Stringarg1,String[]arg2){
//TODOAuto-generatedmethodstub
intcount=0;
switch(uriMatcher.match(arg0))
{
caseMULTIPLE_PEOPLE:
count=db.delete(DB_TABLE,arg1,arg2);
break;
caseSINGLE_PEOPLE:
Stringsegment=arg0.getPathSegments().get
(1);
count=db.delete(DB_TABLE,People.KEY_ID+"="+segment,arg2);
break;
default:
thrownewIllegalArgumentException("UnsupportedURI:
"+arg0);
}
getContext().getContentResolver().notifyChange(arg0,null);
returncount;
}
@Override
publicStringgetType(Uriarg0){
//TODOAuto-generatedmethodstub
switch(uriMatcher.match(arg0))
{
caseMULTIPLE_PEOPLE:
returnPeople.MINE_TYPE_MULTIPLE;
caseSINGLE_PEOPLE:
returnPeople.MINE_TYPE_SINGLE;
default:
thrownewIllegalArgumentException("Unknownuri:
"+arg0);
}
}
@Override
publicUriinsert(Uriarg0,ContentValuesarg1){
//TODOAuto-generatedmethodstub
longid=db.insert(DB_TABLE,null,arg1);
if(id>0)
{
UrinewUri=ContentUris.withAppendedId(People.CONTENT_URI,id);
getContext().getContentResolver().notifyChange(newUri,null);
returnnewUri;
}
thrownewSQLException("Failedtoinsertrowinto"+arg0);
}
@Override
publicbooleanonCreate(){
//TODOAuto-generatedmethodstub
Contextcontext=getContext();
dbOpenHelper=newDBOpenHelper(context,DB_NAME,null,DB_VERSION);
db=dbOpenHelper.getWritableDatabase();
if(db==null)
returnfalse;
else
returntrue;
}
@Override
publicCursorquery(Uriarg0,String[]arg1,Stringarg2,String[]arg3,
Stringarg4){
//TODOAuto-generatedmethodstub
SQLiteQueryBuilderqb=newSQLiteQueryBuilder();
qb.setTables(DB_TABLE);
switch(uriMatcher.match(arg0))
{
caseSINGLE_PEOPLE:
qb.appendWhere(People.KEY_ID+"="+arg0.getPathSegments().get
(1));
break;
default:
break;
}
Cursorcursor=qb.query(db,arg1,arg2,arg3,null,null,arg4);
cursor.setNotificationUri(getContext().getContentResolver(),arg0);
returncursor;
}
@Override
publicintupdate(Uriarg0,ContentValuesarg1,Stringarg2,String[]arg3){
//TODOAuto-generatedmethodstub
intcount;
switch(uriMatcher.match(arg0))
{
caseMULTIPLE_PEOPLE:
count=db.update(DB_TABLE,arg1,arg2,arg3);
break;
caseSINGLE_PEOPLE:
Stringsegment=arg0.getPathSegments().get
(1);
count=db.update(DB_TABLE,arg1,People.KEY_ID+"="+segment,arg3);
break;
default:
thrownewIllegalArgumentException("UnknownURI:
"+arg0);
}
getContext().getContentResolver().notifyChange(arg0,null);
returncount;
}
}
ContentResolverDemo.java文件的完整代码
packageedu.tjut.cs.contentResolverDemo;
importedu.tjut.cs.contentResolverDemo.R;
importandroid.app.Activity;
importandroid.content.ContentResolver;
importandroid.content.ContentValues;
importandroid.database.Cursor;
import.Uri;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.TextView;
publicclassContentResolverDemoActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
privateContentResolverresolver;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
finalEditTextnameEditText=(EditText)findViewById(R.id.nameEditText);
finalEditTextageEditText=(EditText)findViewById(R.id.ageEditText);
finalEditTextheightEditText=(EditText)findViewById(R.id.heightEditText);
finalEditTextidEditText=(EditText)findViewById(R.id.idEditText);
finalTextViewresultTextView=(TextView)findViewById(R.id.resultView);
ButtonaddButton=(Button)findViewById(R.id.addButton);
ButtonshowAllButton=(Button)findViewById(R.id.showAllButton);
ButtonclearAllButton=(Button)findViewById(R.id.clearAllButton);
ButtonremoveAllButton=(Button)findViewById(R.id.removeAllButton);
ButtondeleteIDButton=(Button)findViewById(R.id.deleteIDButton);
ButtonqueryIDButton=(Button)findViewById(R.id.queryIDButton);
ButtonupdateIDButton=(Button)findViewById(R.id.updateIDButton);
resolver=this.getContentResolver();
addButton.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
ContentValuesvalues=newContentValues();
values.put(People.KEY_NAME,nameEditText.getText().toString());
values.put(People.KEY_AGE,Integer.parseInt(ageEditText.getText().toString()));
values.put(People.KEY_HEIGHT,Float.parseFloat(heightEditText.getText().toString()));
UrinewUri=resolver.insert(People.CONTENT_URI,values);
resultTextView.setText("添加成功,URI:
"+newUri);
}
});
showAllButton.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
Cursorcursor=resolver.query(People.CONTENT_URI,newString[]{People.KEY_ID,People.KEY_NAME,People.KEY_AGE,People.KEY_HEIGHT},null,null,null);
if(cursor==null)
{
resultTextView.setText("数据库中没有数据");
return;
}
Stringmsg="数据库:
"+String.valueOf(cursor.getCount())+"条记录"+"\n";
if(cursor.moveToFirst())
{
do{
msg+="ID:
"+cursor.getInt(cursor.getColumnIndex(People.KEY_ID))+",";
msg+="姓名:
"+cursor.getString(cursor.getColumnIndex(People.KEY_NAME))+",";
msg+="年龄:
"+cursor.getInt(cursor.getColumnIndex(People.KEY_AGE))+",";
msg+="身高:
"+cursor.getFloat(cursor.getColumnIndex(People.KEY_HEIGHT))+"\n";
}while(cursor.moveToNext());
}
resultTextView.setText(msg);
}
});
clearAllButton.setOnClickListener(newView.OnClickListen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验七 数据共享 实验 数据 共享