Android 自定义ContentProvider简单实例

Android 自定义ContentProvider简单实例

Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。

要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库。

1,创建一个数据库帮助类,归根结底都是它在操作数据库。代码如下:

package com.njue; 

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper; 

public class DBManager extends SQLiteOpenHelper {
public static final String myProvider_table_name="myProvider_table_name";
String sql="create table myProvider_table_name(id integer,name text)";
  public DBManager(Context context) {
    super(context, "myPrivoder.db", null, 1);
    // TODO Auto-generated constructor stub
  } 

  @Override
  public void onCreate(SQLiteDatabase arg0) {
    // TODO Auto-generated method stub
   arg0.execSQL(sql);
  } 

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub 

  } 

}

2,创建一个myProvider类,该类继承ContentProvider,实现其抽象方法来操作数据库,该类引用DBManager类来获得数据库实例。

package com.njue; 

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri; 

public class myProvider extends ContentProvider {
  DBManager dbHelper;
  @Override
  public int delete(Uri arg0, String arg1, String[] arg2) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    int id=db.delete(DBManager.myProvider_table_name, arg1, arg2);
    if(id!=0)return id;
    return 0;
  } 

  @Override
  public String getType(Uri uri) {
    // TODO Auto-generated method stub
    return null;
  } 

  @Override
  public Uri insert(Uri uri, ContentValues values) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    db.insert(DBManager.myProvider_table_name, "id", values);
    return null;
  } 

  @Override
  public boolean onCreate() {
    // TODO Auto-generated method stub
    dbHelper=new DBManager(getContext());
    return true;
  } 

  @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    Cursor c=db.query(DBManager.myProvider_table_name,projection, selection, selectionArgs, null, null, sortOrder);
    return c;
  } 

  @Override
  public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {
    // TODO Auto-generated method stub
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    int id=db.update(DBManager.myProvider_table_name, values, selection, selectionArgs);
    if(id!=0)return id;
    return 0;
  } 

}

3,ContextProvider必须声明才能使用,因此,需要在AndroidManifest.xml配置文件中声明。声明很简单,需要类名称和授权名称两个属性。

<provider android:name="myProvider"
    android:authorities="com.njue.myProvider" />

到这里,我们自定义的ContentProvider就完成了。我们可以在Eclipse中的File Explorer 窗口中看到自定义的ContentProvider

 4,简单测试

package com.njue; 

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; 

public class Content_providerActivity extends Activity {
  /** Called when the activity is first created. */
   Uri uri;
   String AUTHORITY="content://com.njue.myProvider/myProvider_table_name";
   ContentResolver cr;
   EditText input;
   Button insert;
   TextView show;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    input=(EditText)findViewById(R.id.input);
    insert=(Button)findViewById(R.id.insert);
    show=(TextView)findViewById(R.id.show);
    uri=uri.parse(AUTHORITY);
    cr=this.getContentResolver();
    insert.setOnClickListener(new Button.OnClickListener(){ 

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
         ContentValues values=new ContentValues();
          values.put("name", input.getText().toString());
          cr.insert(uri, values);
          Cursor c=cr.query(uri, null, null, null, null);
          show.setText("");
          c.moveToFirst();
          while(c.moveToNext()){
           show.append(c.getString(1)+"\r\n");
          }
          input.setText("");
      }}); 

  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android ContentProvider获取手机联系人实例

    在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家,方便以后要用的时候可以看看 我们先看下获取所有联系人的方式,把所有联系人展示在listView上 public void getLinkMan(View view){ //获取联系人 Uri uri=Uri.parse("content://com.android.contacts/raw_con

  • Android 中自定义ContentProvider与ContentObserver的使用简单实例

    Android 中自定义ContentProvider与ContentObserver的使用简单实例 示例说明: 该示例中一共包含两个工程.其中一个工程完成了自定义ContentProvider,另外一个工程用于测试该自定义ContentProvider且在该工程中使用了ContentObserver监听自定义ContentProvider的数据变化 以下代码为工程TestContentProvider ContentProviderTest如下: package cn.testcontentp

  • android基础总结篇之八:创建及调用自己的ContentProvider

    今天我们来讲解一下如何创建及调用自己的ContentProvider. 在前面两篇文章中我们分别讲了如何读写联系人和短消息,相信大家对于ContentProvider的操作方法已经有了一定程度的了解.在有些场合,除了操作ContentProvider之外,我们还有可能需要创建自己的ContentProvider,来提供信息共享的服务,这就要求我们很好的掌握ContentProvider的创建及使用技巧.下面我们就由表及里的逐步讲解每个步骤. 在正式开始实例演示之前,我们先来了解以下两个知识点:

  • 实例讲解Android中ContentProvider组件的使用方法

    ContentProvider基本使用 为了在应用程序之间交换数据,android提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可以通过提供ContentPRovider来实现,其他应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据. 实现ContentProvider的步骤: 1)编写一个类,继承ContentProvid

  • Android ContentProvider实现获取手机联系人功能

    在之前项目中有用到关于获取手机联系人的部分,闲置就想和大家分享一下,话不多说,上代码: java部分: package com.example.content; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle

  • Android应用中使用ContentProvider扫描本地图片并显示

    之前群里面有朋友问我,有没有关于本地图片选择的Demo,类似微信的效果,他说网上没有这方面的Demo,问我能不能写一篇关于这个效果的Demo,于是我研究了下微信的本地图片选择的Demo,自己仿照的写了下分享给大家,希望对以后有这样子需求的朋友有一点帮助吧,主要使用的是ContentProvider扫描手机中的图片,并用GridView将图片显示出来,关于GridView和ListView显示图片的问题,一直是一个很头疼的问题,因为我们手机的内存有限,手机给每个应用程序分配的内存也有限,所以图片多

  • Android数据持久化之ContentProvider机制详解

    本文实例讲述了Android数据持久化之ContentProvider机制.分享给大家供大家参考,具体如下: 一般而言,android操作系统的应用程序所建立的数据只允许自己使用,应用程序彼此间无法借助公用存储器来共享数据,android系统提供了一个机制,即内容提供器(ContentProvider),来公开自己私有的数据到数据内容器,通过该机制,可以供其他应用程序来读取自己内部的数据,当然也可以访问其他应用程序的数据.通常,内容提供器背后都有SQLite数据库的支持,用以存储内容提供内部数据

  • Android 中ContentProvider的实例详解

    Android 中ContentProvider的实例详解 Content Provider 的简单介绍: * Android中的Content Provider 机制可支持在多个应用中存储和读取数据.这也是跨应用 共享数据的唯一方式.在Android系统中,没有一个公共的内存区域,供多个应用共享存储数据: * Android 提供了一些主要数据类型的ContentProvider ,比如:音频.视频.图片和私人通讯录等: 在android.provider 包下面找到一些android提供的C

  • Android 自定义ContentProvider简单实例

    Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下. 要使用ContentProvider来操作数据,必须要有保存数据的场所.可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库. 1,创建一个数据库帮助类,归根结底都是它在操作数据库.代码如下: package com.njue; import android.content.Context; import

  • Android自定义dialog简单实现方法

    本文实例讲述了Android自定义dialog简单实现方法.分享给大家供大家参考,具体如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.function_music); // 实例化新的窗口 Window w = getWindow(); // 获取默认显示数据 Display display

  • JavaScript实战(原生range和自定义特效)简单实例

    今天我又码了两个特效:一个是用原生input[type=range]的,另一个完全自定义的:下面是完整代码和演示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> #tip{ position: absolute; top: 30px; left: 0; ri

  • Android 登录处理简单实例(源码下载)

    Android 登录处理简单实例 今天整理一下之前在项目中写的关于某些界面需要登录判断处理.这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图: 以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理.接下来我们来看一下实现方式. 先从核心代码开始看: public class GoLoginUtil { public static final String CLASSNAME = "className"; public st

  • Android 自定义标题栏的实例详解

     Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮的点击事件 一.代码 这里先介绍一下流程: 1. 创建一个标题栏布局文件 mytitlebar.xml 2. 在style.xml中创建 mytitlestyle 主题 3. 创建类 CustomTitleBar 4. 在需要自定义标题栏的Activity的OnCreate方法中实例化 Custo

  • Android 单例模式 Singleton 简单实例设计模式解析

    单例模式 Singleton 简单实例设计模式解析 前言 今天我来全面总结一下Android开发中最常用的设计模式 - 单例模式. 关于设计模式的介绍,可以看下我之前写的:1分钟全面了解"设计模式" 目录 1. 引入 1.1 解决的是什么问题 之前说过,设计模式 = 某类特定问题的解决方案,那么单例模式是解决什么问题的解决方案呢? 含义:单例 =一个实例: 解决的问题:降低对象之间的耦合度 解决方法:单例模式,即实现一个类只有一个实例化对象,并提供一个全局访问点 1.2 实例引入 接下

  • Android自定义照相机的实例

    Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是通过自定义的方式来实现手机照相的功能. 创建一个项目:FingerTakePicture 首先来搞一下界面: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

  • Android自定义滚动选择器实例代码

    Android自定义滚动选择器 实现图片的效果 代码如下 package com.linzihui.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Align; import android.graph

  • Android自定义扇形倒计时实例代码

    一.概述 严格来说,我是Android小白,写的目的只是想作为知识储备而已-.但是想到别人或许会不小心搜到我的这篇,如果我只是简单的描述,别人有可能看不懂,说不定还被吐槽,那岂不是很冤吗? 所以,我还是把问题及过程描述清楚,这也是对自己的一个交代,同时,这也是我的第一篇,我应该做好它; 先说一下需求: 最近工作中需要做一个倒计时,是那种一个圆,慢慢的被吃掉的动画倒计时,由于自己知识不是很足,只知道要用Canvas来画,在网上搜了一圈,发现要么是静态的画了一个扇形,要么是不能控制控件的位置大小-.

随机推荐