实验七 数据共享.docx

上传人:b****7 文档编号:8720757 上传时间:2023-02-01 格式:DOCX 页数:19 大小:778.80KB
下载 相关 举报
实验七 数据共享.docx_第1页
第1页 / 共19页
实验七 数据共享.docx_第2页
第2页 / 共19页
实验七 数据共享.docx_第3页
第3页 / 共19页
实验七 数据共享.docx_第4页
第4页 / 共19页
实验七 数据共享.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验七 数据共享.docx

《实验七 数据共享.docx》由会员分享,可在线阅读,更多相关《实验七 数据共享.docx(19页珍藏版)》请在冰豆网上搜索。

实验七 数据共享.docx

实验七数据共享

步骤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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1