第一行代码 第7章 内容提供器 --实现跨程序数据共享
2017-08-12 22:03
525 查看
DatabaseTest.apk源码如下:
MainActivity.java
MyDatabaseHelper.java
MyContentProvider.java
AndroidManifest.xml
ProviderTest.apk源码如下:
MainActivity.java
AndroidManifest.xml
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private MyDatabaseHelper myDatabaseHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1); Button createDatabase = (Button)findViewById(R.id.create_database); createDatabase.setOnClickListener(this); Button addData = (Button)findViewById(R.id.add_data); addData.setOnClickListener(this); Button updateData = (Button)findViewById(R.id.update_data); updateData.setOnClickListener(this); Button deleteData = (Button)findViewById(R.id.delete_data); deleteData.setOnClickListener(this); Button queryData = (Button)findViewById(R.id.query_data); queryData.setOnClickListener(this); } @Override public void onClick(View view) { SQLiteDatabase db = myDatabaseHelper.getReadableDatabase(); ContentValues values = new ContentValues(); switch (view.getId()){ case R.id.create_database: //myDatabaseHelper.getReadableDatabase(); break; case R.id.add_data: values.put("author", "admin"); values.put("book_name", "Android"); values.put("pages", 800); values.put("price", 68.4); db.insert("Book", null, values); values.clear(); values.put("author", "sky"); values.put("book_name", "Iphone"); values.put("pages", 1000); values.put("price", 78.2); db.insert("Book", null, values); break; case R.id.update_data: values.put("price", 12.02); db.update("Book", values, "book_name=?", new String[]{"Android"}); break; case R.id.delete_data: db.delete("Book", "book_name=?", new String[]{"Android"}); break; case R.id.query_data: int count = 0; Cursor cursor = db.query("Book", null, null, null, null, null,null); if(cursor.moveToFirst()){ do{ String author = cursor.getString(cursor.getColumnIndex("author")); Toast.makeText(this,author+":"+count,Toast.LENGTH_SHORT).show(); count++; }while (cursor.moveToNext()); } cursor.close(); break; default: break; } } }
MyDatabaseHelper.java
public class MyDatabaseHelper extends SQLiteOpenHelper { private Context context; public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement," + "author text," + "price real," + "pages integer," + "book_name text)"; public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)" ; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); this.context = context; } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(CREATE_BOOK); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL(CREATE_CATEGORY); } }
MyContentProvider.java
public class MyContentProvider extends ContentProvider { public static final int BOOK_DIR = 0; public static final int BOOK_ITEM = 1; public static final int CATEGORY_DIR = 2; public static final int CATEGORY_ITEM = 3; public static final String AUTHORITY = "com.sky.databasetest.provider"; private static UriMatcher uriMatcher; private MyDatabaseHelper dbHelper; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, "Book", BOOK_DIR); uriMatcher.addURI(AUTHORITY, "Book/#", BOOK_ITEM); uriMatcher.addURI(AUTHORITY, "Category", CATEGORY_DIR); uriMatcher.addURI(AUTHORITY, "Category/#", CATEGORY_ITEM); } public MyContentProvider() { } @Override public boolean onCreate() { dbHelper = new MyDatabaseHelper(getContext(), "BookStore.db", null, 2); return true; } @Override public String getType(Uri uri) { String type = null; switch (uriMatcher.match(uri)){ case BOOK_DIR: type = "vnd.android.cursor.dir/vnd.com.sky.databasetest.provider.Book"; break; case BOOK_ITEM: type = "vnd.android.cursor.item/vnd.com.sky.databasetest.provider.Book"; break; case CATEGORY_DIR: type = "vnd.android.cursor.dir/vnd.com.sky.databasetest.provider.Category"; break; case CATEGORY_ITEM: type = "vnd.android.cursor.item/vnd.com.sky.databasetest.provider.Category"; break; default: break; } return type; } @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Uri uriRet=null; switch (uriMatcher.match(uri)){ case BOOK_DIR: case BOOK_ITEM: long newBookId = db.insert("Book", null, values); uriRet = Uri.parse("content://" + AUTHORITY + "/Book/"+newBookId); break; case CATEGORY_DIR: case CATEGORY_ITEM: long newCategoryId = db.insert("Category", null, values); uriRet = Uri.parse("content://" + AUTHORITY + "/Category/"+newCategoryId); break; default:break; } return uriRet; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = null; switch (uriMatcher.match(uri)){ case BOOK_DIR: cursor = db.query("Book", projection, selection, selectionArgs, null, null, sortOrder); break; case BOOK_ITEM: String bookId = uri.getPathSegments().get(1); cursor = db.query("Book", projection, "id=?", new String[]{bookId}, null, null, sortOrder); break; case CATEGORY_DIR: cursor = db.query("Category", projection, selection, selectionArgs, null, null, sortOrder); break; case CATEGORY_ITEM: String categoryId = uri.getPathSegments().get(1); cursor = db.query("Category", projection, "id=?", new String[]{categoryId}, null, null, sortOrder); break; default:break; } return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getReadableDatabase(); int updateRows = 0; switch (uriMatcher.match(uri)){ case BOOK_DIR: updateRows = db.update("Book", values, selection, selectionArgs); break; case BOOK_ITEM: String bookId = uri.getPathSegments().get(1); updateRows = db.update("Book", values, "id=?", new String[]{bookId}); break; case CATEGORY_DIR: updateRows = db.update("Category", values, selection, selectionArgs); break; case CATEGORY_ITEM: String categoryId = uri.getPathSegments().get(1); updateRows = db.update("Category", values, "id=?", new String[]{categoryId}); break; default:break; } return updateRows; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getReadableDatabase(); int deleteRows = 0; switch (uriMatcher.match(uri)){ case BOOK_DIR: deleteRows = db.delete("Book", selection, selectionArgs); break; case BOOK_ITEM: String bookId = uri.getPathSegments().get(1); deleteRows = db.delete("Book", "id=?", new String[]{bookId}); break; case CATEGORY_DIR: deleteRows = db.delete("Category", selection, selectionArgs); break; case CATEGORY_ITEM: String categoryId = uri.getPathSegments().get(1); deleteRows = db.delete("Category", "id=?", new String[]{categoryId}); break; default:break; } return deleteRows; } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sky.databasetest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name=".MyContentProvider" android:authorities="com.sky.databasetest.provider" android:enabled="true" android:exported="true"> </provider> </application> </manifest>
ProviderTest.apk源码如下:
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String AUTHORITY = "com.sky.databasetest.provider"; private String newId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnAddData = (Button)findViewById(R.id.btnAddData); Button btnQueryData = (Button)findViewById(R.id.btnQueryData); Button btnUpdateData = (Button)findViewById(R.id.btnUpdateData); Button btnDeleteData = (Button)findViewById(R.id.btnDeleteData); btnAddData.setOnClickListener(this); btnQueryData.setOnClickListener(this); btnUpdateData.setOnClickListener(this); btnDeleteData.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnAddData: { Uri uri = Uri.parse("content://"+ AUTHORITY + "/Book"); ContentValues values = new ContentValues(); values.put("book_name", "adfsaffsf"); values.put("author", "aha"); values.put("price", "45.3"); values.put("pages", "120"); Uri newUri = getContentResolver().insert(uri, values); newId = newUri.getPathSegments().get(1); } break; case R.id.btnQueryData: { Uri uri = Uri.parse("content://"+ AUTHORITY+"/Book"); Cursor cursor = getContentResolver().query(uri, null, null, null, null); if(cursor!=null){ while (cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("book_name")); String author = cursor.getString(cursor.getColumnIndex("author")); int page = cursor.getInt(cursor.getColumnIndex("pages")); double price = cursor.getDouble(cursor.getColumnIndex("price")); Log.d("MainActivity", "book name is :" + name); Log.d("MainActivity", "book author is :" + author); Log.d("MainActivity", "book page is :" + page); Log.d("MainActivity", "book price is :" + price); } cursor.close(); } } break; case R.id.btnUpdateData:{ Uri uri = Uri.parse("content://"+ AUTHORITY + "/Book/" + newId); ContentValues values = new ContentValues(); values.put("price", "22.6"); getContentResolver().update(uri, values, null, null); } break; case R.id.btnDeleteData:{ Uri uri = Uri.parse("content://"+ AUTHORITY + "/Book/" + newId); getContentResolver().delete(uri, null, null); } break; default: break; } } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sky.providertest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
相关文章推荐
- 第二行代码学习笔记——第七章:跨程序共享数据——探究内容提供器
- 阅读郭林《第一行代码》的笔记——第7章 跨程序共享数据,探究内容提供器
- 内容提供器(Content Provider)--跨程序共享数据
- 跨程序共享数据——内容提供器
- 跨程序共享数据,内容提供器
- 第一行代码-第7章 内容提供器
- Android入门(十四)内容提供器-实现跨程序共享实例
- 第七章 跨程序共享数据-探究内容提供器
- 安卓跨程序共享数据:内容提供器Content Provider
- 第一行代码 第7章 内容提供器 -- 运行时权限
- Android学习第十天—跨程序共享数据(探究内容提供器)
- 跨程序共享数据,探究内容提供器
- 七,跨程序共享数据——内容提供器
- Android跨程序共享数据,探究内容提供器(进阶篇)
- 内容提供器(二 - 跨程序数据共享)
- 跨程序共享数据,探究内容提供器
- Android跨程序共享数据,探究内容提供器
- Android之 内容提供器(1)——使用内容提供器访问其它程序共享的数据
- 跨程序共享数据,探究内容提供器
- 跨程序共享数据-探究内容提供器(contentprovider&contentResover)(Recycleview 实例)