`
dyllove98
  • 浏览: 1409538 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39189
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80270
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133389
社区版块
存档分类
最新评论

android contentProvider用法

阅读更多
存储数据的方式很多,在android平时有sharedpreference file  sqlite等.这里主要分析下数据库存储.为了共享数据库.可以让数据库披上contentprovider 外衣.具体看例子
[size=12]package com.misoo.SQ02;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class ac01 extends ListActivity {
public static int g_variable;
public static final String AUTHORITY = "com.misoo.provider.SQ02";
public static final Uri CONTENT_URI =
Uri.parse("content://" + AUTHORITY + "/StudentTable");
private static final String[] PROJECTION = new String[] {
"stud_no", "stud_name" };
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent.getData() == null) intent.setData(CONTENT_URI);
Cursor cur = getContentResolver().query(getIntent().getData(),
PROJECTION, null, null, null);
ArrayList<Map<String, Object>> coll
= new ArrayList<Map<String, Object>>();
Map<String, Object> item;
cur.moveToFirst();
while(!cur.isAfterLast()) {
item = new HashMap<String, Object>();
item.put("c1", cur.getString(0) + ", " + cur.getString(1));
coll.add(item);
cur.moveToNext(); }
this.setListAdapter(new SimpleAdapter(this, coll,
android.R.layout.simple_list_item_1, new String[] { "c1" },
new int[] {android.R.id.text1})); }
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
finish();
}
}
package com.misoo.SQ02;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;
public class DataProvider extends ContentProvider {
private static final String DATABASE_NAME = "StudDB_2.db";
private static final int DATABASE_VERSION = 2;
private static final String TABLE_NAME = "StudentTable";
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override public void onCreate(SQLiteDatabase db) {
db.execSQL("Create TABLE " + TABLE_NAME + " ("
+ "stud_no" + " TEXT," + "stud_name" + " TEXT" + ");");
String sql_1 = "insert into "+ TABLE_NAME +
" (stud_no, stud_name) values('S108', 'Lily Chen');";
String sql_2 = "insert into " + TABLE_NAME +
" (stud_no, stud_name) values('S201', 'Tom Kao');";
String sql_3 = "insert into " + TABLE_NAME +
" (stud_no, stud_name) values('S333', 'Peter Rabbit');";
try {
db.execSQL(sql_1); db.execSQL(sql_2); db.execSQL(sql_3);
} catch (SQLException e) { Log.e("ERROR", e.toString()); }
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
private DatabaseHelper mOpenHelper;
@Override public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext());
return true;
}
@Override public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = db.query(TABLE_NAME, projection, null, null, null, null, null);
return c;
}
@Override public String getType(Uri uri)
{ return null; }
@Override public Uri insert(Uri uri, ContentValues initialValues)
{ return uri; }
@Override public int delete(Uri uri, String where, String[] whereArgs)
{ return 0; }
@Override public int update(Uri uri, ContentValues values,
String where, String[] whereArgs)
{ return 0; }
}[/size]

从例子可以看出。不管怎么表达,最后要得到SQLiteDatabase引用.然后用这个引用去操作数据库.在这里通过contentprovide 包了SQLlitOpenhelper ,通过这个来创建数据库.创建表.然后通过getContentResolver 来操作数据库.这个代码应该不难,关键我想,系统如何知道我要操作哪个数据库里的哪个表呢?

这需要用户指定
public static final String AUTHORITY = "com.misoo.provider.SQ02";
public static final Uri CONTENT_URI =
Uri.parse("content://" + AUTHORITY + "/StudentTable");

这两句就是指定了哪个数据库,指定了哪个表. 这说明在manifest.xml 里一定要加上这么几句

<provider android:name="DataProvider"
android:authorities="com.misoo.provider.SQ02">
</provider>

有了这个东西就知道是哪个数据了.就可以开始操作了.
分享到:
评论

相关推荐

    Android+Room+ContentProvider

    在Android应用开发中,数据持久化是一个至关重要的环节,而Android Room和ContentProvider是其中的两个关键组件。本文将深入探讨这两个技术,并结合实际案例,解释如何在Android应用中使用它们来管理和共享SQLite...

    Android ContentProvider全面解析

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构暴露给其他应用,同时也能够访问其他应用公开的数据。本篇文章将全面解析...

    android 用ContentProvider操作文件

    2. 创建ContentProvider:要创建一个ContentProvider,你需要继承`android.content.ContentProvider`类,并重写其中的关键方法,如`query()`, `insert()`, `update()`, `delete()` 和 `getType()`。 3. 注册...

    android ContentProvider Demo

    本示例"android ContentProvider Demo"将深入探讨如何创建和使用ContentProvider来实现跨应用的数据交换。ContentProvider作为Android四大组件之一,它的主要任务是封装和管理应用程序中的私有数据,使其他应用程序...

    android contentprovider使用示例

    本示例将详细解释如何在Android中使用ContentProvider。 1. **ContentProvider基本概念** ContentProvider是Android系统提供的一种数据存储和访问机制,它允许应用程序之间进行数据交换,而无需暴露底层数据库或...

    Android ContentProvider简单实现

    1. **创建ContentProvider类**:继承自`android.content.ContentProvider`抽象类,重写其生命周期方法,如`onCreate()`,以及CRUD相关的方法,如`query()`, `insert()`, `update()`, `delete()` 和 `getType()`。...

    android-关于ContentProvider的使用例子

    通过以上讲解,我们了解了ContentProvider的基本原理和使用方法。在实际开发中,利用ContentProvider可以构建强大的数据共享机制,让不同应用间的数据交换变得简单而安全。"ContentProviderApp1"和...

    Android ContentProvider 使用详解源码

    在Android系统中,ContentProvider是实现跨应用数据共享的关键组件,它允许应用程序暴露自己的数据集,使得其他应用可以通过标准的接口进行访问。本教程将深入解析ContentProvider的使用及其源码,结合SQLite数据库...

    Android中ContentProvider的示例

    在ContentProvider的上述方法中,我们可以使用SQLiteOpenHelper来执行SQL语句,与数据库进行交互。 4. **注册ContentProvider**: 在AndroidManifest.xml文件中,我们需要声明ContentProvider,指定它的authority...

    Android 之 自定义ContentProvider的使用

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...

    Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作

    接下来,我们将深入探讨如何使用ContentProvider和SQLite在Android应用中执行数据库操作。 首先,SQLite在Android中的应用非常广泛。每个Android应用程序可以拥有一个或多个SQLite数据库,这些数据库存储在应用程序...

    Android学习 ContentProvider数据更新与Observer模式.doc

    在Android开发中,ContentProvider和Observer模式是两个关键的概念,它们在数据管理和更新中起着重要作用。ContentProvider作为Android系统中数据共享的桥梁,允许不同的应用程序之间交换数据,而Observer模式则是一...

    Android ContentProvider的使用

    本篇文章将深入探讨ContentProvider的使用方法、工作原理以及在实际开发中的应用。 首先,理解ContentProvider的基本结构。每个ContentProvider都继承自`android.content.ContentProvider`类,并需要重写几个关键的...

    android contentprovider的使用

    下面我们将深入探讨ContentProvider的使用方法以及它在共享数据中的作用。 首先,创建一个ContentProvider需要继承`android.content.ContentProvider`类,并重写其中的关键方法。这些方法包括`onCreate()`、`query...

    Android 演示ContentProvider组件用法的写日记APP源码.rar

    本源码主要是演示Android ContentProvider组件的使用,借助一个写日记小程序来演示组件中各种方法的使用技巧,比如向日记本中插入一条数据,编辑当前数据内容、删除当前数据、查询cursor时候,感兴趣的那些条例如何...

    android contentprovider的例子

    一个自定义的ContentProvider需要继承自`android.content.ContentProvider`类,并实现其中的关键方法,如`onCreate()`、`query()`、`insert()`、`update()`、`delete()`和`getType()`。这些方法分别对应于对数据进行...

    android contentprovider的使用总结

    1. **Provider类**:继承自`android.content.ContentProvider`,这是ContentProvider的基础类,需要重写一些关键方法,如`onCreate()`、`query()`、`insert()`、`update()`、`delete()`等,用于处理数据请求。...

    ContentProvider多表创建

    在Android系统中,ContentProvider是实现数据共享和跨应用数据访问的重要组件。它遵循统一的URI(Uniform Resource Identifier)机制,使得不同的应用可以方便地读取和修改存储在ContentProvider中的数据。本教程将...

    基于Android ContentProvider的总结详解

    - **数据操作**:使用`insert()`、`delete()`和`update()`方法,可以添加、删除和修改ContentProvider中的数据。例如: ```java Uri insertedUri = getContentResolver().insert(mContacts, values); int rows...

Global site tag (gtag.js) - Google Analytics