1、实验七 数据共享步骤1.1. 采用数据库方式实现数据共享PeopleProvider功能,完善“ContentResolverDemo”功能,实现对PeopleProvider的调用在已有程序界面基础上,分步骤实现下述功能(注,通过改变AndroidManifest.xml文件,选择其中一个Acitivity有效启动):采用数据库方式实现数据共享PeopleProvider功能: 数据添加 数据删除 数据查询 数据更新ContentProvider(数据提供者)是在应用程序间共享数据的一种接口机制。应用程序在不同的进程中运行,因此,数据和文件在不同应用程序之间是不能够直接访问的。SharedP
2、references和文件存储为跨越程序边界的访问提供了方法,但这些方法都有局限性。ContentProvider提供了更为高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。步骤2、完善“ContentResolverDemo”功能,实现对PeopleProvider的调用代码如下:People.java文件的完整代码package edu.tjut.cs.contentResolverDemo;import .Uri;public class People public static final
3、String MIME_DIR_PREFIX = vnd.android.cursor.dir; public static final String MIME_ITEM_PREFIX = vnd.android.cursor.item; public static final String MINE_ITEM = vnd.tjut.people; public static final String MINE_TYPE_SINGLE = MIME_ITEM_PREFIX + / + MINE_ITEM; public static final String MINE_TYPE_MULTIPL
4、E = MIME_DIR_PREFIX + / + MINE_ITEM; public static final String AUTHORITY = edu.tjut.cs.peopleprovider; public static final String PATH_SINGLE = people/#; public static final String PATH_MULTIPLE = people; public static final String CONTENT_URI_STRING = content:/ + AUTHORITY + / + PATH_MULTIPLE; pub
5、lic static final Uri CONTENT_URI = Uri.parse(CONTENT_URI_STRING); public static final String KEY_ID = _id; public static final String KEY_NAME = name; public static final String KEY_AGE = age; public static final String KEY_HEIGHT = height;PeopleProvider.java文件的完整代码package edu.tjut.cs.peopleProvider
6、;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import an
7、droid.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteQueryBuilder;import .Uri;public class peopleProvider extends ContentProvider private static final String DB_NAME = people.db; private static final String DB_TABLE =
8、 peopleinfo; private static final int DB_VERSION = 1; public static final String KEY_ID = _id; public static final String KEY_NAME = name; public static final String KEY_AGE = age; public static final String KEY_HEIGHT = height; private SQLiteDatabase db; private DBOpenHelper dbOpenHelper; private s
9、tatic final int MULTIPLE_PEOPLE = 1; private static final int SINGLE_PEOPLE = 2; private static final UriMatcher uriMatcher; static uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(People.AUTHORITY, People.PATH_MULTIPLE, MULTIPLE_PEOPLE); uriMatcher.addURI(People.AUTHORITY, People
10、.PATH_SINGLE, SINGLE_PEOPLE); private static class DBOpenHelper extends SQLiteOpenHelper public DBOpenHelper(Context context, String name, CursorFactory factory, int version) super(context, name, factory, version); / TODO Auto-generated constructor stub private static final String DB_CREATE = create
11、 table + DB_TABLE + ( + KEY_ID + integer primary key autoincrement, + KEY_NAME + text not null, + KEY_AGE + integer, + KEY_HEIGHT + float); Override public void onCreate(SQLiteDatabase db) / TODO Auto-generated method stub db.execSQL(create table peopleinfo (_id integer primary key autoincrement, na
12、me text not null, age integer, height float);); Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) / TODO Auto-generated method stub db.execSQL(DROP TABLE IF EXISTS + DB_TABLE); onCreate(db); Override public int delete(Uri arg0, String arg1, String arg2) / TODO Auto-ge
13、nerated method stub int count = 0; switch(uriMatcher.match(arg0) case MULTIPLE_PEOPLE: count = db.delete(DB_TABLE, arg1, arg2); break; case SINGLE_PEOPLE: String segment = arg0.getPathSegments().get(1); count = db.delete(DB_TABLE, People.KEY_ID + = + segment, arg2); break; default: throw new Illegal
14、ArgumentException(Unsupported URI:+arg0); getContext().getContentResolver().notifyChange(arg0, null); return count; Override public String getType(Uri arg0) / TODO Auto-generated method stub switch(uriMatcher.match(arg0) case MULTIPLE_PEOPLE: return People.MINE_TYPE_MULTIPLE; case SINGLE_PEOPLE: ret
15、urn People.MINE_TYPE_SINGLE; default: throw new IllegalArgumentException(Unknown uri:+arg0); Override public Uri insert(Uri arg0, ContentValues arg1) / TODO Auto-generated method stub long id = db.insert(DB_TABLE, null, arg1); if(id 0) Uri newUri = ContentUris.withAppendedId(People.CONTENT_URI, id);
16、 getContext().getContentResolver().notifyChange(newUri, null); return newUri; throw new SQLException(Failed to insert row into + arg0); Override public boolean onCreate() / TODO Auto-generated method stub Context context = getContext(); dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERS
17、ION); db = dbOpenHelper.getWritableDatabase(); if(db = null) return false; else return true; Override public Cursor query(Uri arg0, String arg1, String arg2, String arg3, String arg4) / TODO Auto-generated method stub SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(DB_TABLE); switch(u
18、riMatcher.match(arg0) case SINGLE_PEOPLE: qb.appendWhere(People.KEY_ID + = + arg0.getPathSegments().get(1); break; default: break; Cursor cursor = qb.query(db, arg1, arg2, arg3, null, null, arg4); cursor.setNotificationUri(getContext().getContentResolver(), arg0); return cursor; Override public int
19、update(Uri arg0, ContentValues arg1, String arg2, String arg3) / TODO Auto-generated method stub int count; switch(uriMatcher.match(arg0) case MULTIPLE_PEOPLE: count = db.update(DB_TABLE, arg1, arg2, arg3); break; case SINGLE_PEOPLE: String segment = arg0.getPathSegments().get(1); count = db.update(
20、DB_TABLE, arg1, People.KEY_ID+=+segment, arg3); break; default: throw new IllegalArgumentException(Unknown URI: + arg0); getContext().getContentResolver().notifyChange(arg0, null); return count; ContentResolverDemo.java文件的完整代码package edu.tjut.cs.contentResolverDemo;import edu.tjut.cs.contentResolver
21、Demo.R;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import .Uri;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;publi
22、c class ContentResolverDemoActivity extends Activity /* Called when the activity is first created. */ private ContentResolver resolver; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText nameEditText = (EditText)
23、 findViewById(R.id.nameEditText); final EditText ageEditText = (EditText) findViewById(R.id.ageEditText); final EditText heightEditText = (EditText) findViewById(R.id.heightEditText); final EditText idEditText = (EditText) findViewById(R.id.idEditText); final TextView resultTextView = (TextView) fin
24、dViewById(R.id.resultView); Button addButton = (Button) findViewById(R.id.addButton); Button showAllButton = (Button) findViewById(R.id.showAllButton); Button clearAllButton = (Button) findViewById(R.id.clearAllButton); Button removeAllButton = (Button) findViewById(R.id.removeAllButton); Button del
25、eteIDButton = (Button) findViewById(R.id.deleteIDButton); Button queryIDButton = (Button) findViewById(R.id.queryIDButton); Button updateIDButton = (Button) findViewById(R.id.updateIDButton); resolver = this.getContentResolver(); addButton.setOnClickListener(new View.OnClickListener() Override publi
26、c void onClick(View v) / TODO Auto-generated method stub ContentValues values = new ContentValues(); 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(heightEditT
27、ext.getText().toString(); Uri newUri = resolver.insert(People.CONTENT_URI, values); resultTextView.setText(添加成功,URI:+newUri); ); showAllButton.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub Cursor cursor = resolver.query(People.CO
28、NTENT_URI, new String People.KEY_ID, People.KEY_NAME, People.KEY_AGE, People.KEY_HEIGHT, null, null, null); if(cursor = null) resultTextView.setText(数据库中没有数据); return; String msg = 数据库: + String.valueOf(cursor.getCount() + 条记录 + n; if(cursor.moveToFirst() do msg += ID: + cursor.getInt(cursor.getColu
29、mnIndex(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(new View.OnClickListen
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1