Android中ContentProvider的简单使用

1、新建继承ContentProvider的类

package com.wangzhu.demo;

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

public class MyContentProvider extends ContentProvider {

    /**
     * ContentProvider的数据访问路径
     */
    public static final Uri URI = Uri.parse("content://com.wangzhu.provider");

    private SQLiteDatabase database;

    @Override
    public int delete(Uri arg0, String arg1, String[] arg2) {
        return 0;
    }

    @Override
    public String getType(Uri arg0) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        database.insert("tab", "_id", values);
        return null;
    }

    @Override
    public boolean onCreate() {
        database = getContext().openOrCreateDatabase("myProvider.db3",
                Context.MODE_PRIVATE, null);
        database.execSQL("create table IF NOT EXISTS tab(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)");
        return true;
    }

    @Override
    public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
            String arg4) {
        Cursor cursor = database.query("tab", null, null, null, null, null,
                null);
        return cursor;
    }

    @Override
    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
        return 0;
    }

}

2、在AndroidManifest.xml中为应用程序添加ContentProvider的访问权限

        <!-- android:exported设置为true,表示其他应用可以访问,否则不可以访问 -->
        <provider
            android:name="MyContentProvider"
            android:authorities="com.wangzhu.provider"
            android:exported="true" >
        </provider>

3、进行插入与查询

        final Uri uri = MyContentProvider.URI;

    /**
     * 往Provider中写入数据
     */
    protected void write() {
        //使用getContentResolver()方法获取ContentResolver对象
        ContentResolver resolver = getContentResolver();
        ContentValues values = null;

        values = new ContentValues();
        values.put("name", "Java");
        //调用ContentResolver对象的insert方法,插入数据
        resolver.insert(uri, values);

        values = new ContentValues();
        values.put("name", "Swift");
        resolver.insert(uri, values);

        values = new ContentValues();
        values.put("name", "Python");
        resolver.insert(uri, values);

        values = new ContentValues();
        values.put("name", "C#");
        resolver.insert(uri, values);

    }

    /**
     * 读取Provider中的内容
     */
    protected void read() {
        StringBuilder accum = new StringBuilder();

        //使用getContentResolver()方法获取ContentResolver对象
        //调用ContentResolver对象的query方法,查询数据,返回Cursor对象
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        for (int i = 0, count = cursor.getCount(); i < count; i++) {
            accum.append(cursor.getString(cursor.getColumnIndex("name")))
                    .append("\n");
            cursor.moveToNext();
        }
        System.err.println("read: " + accum);
    }
时间: 2024-10-17 15:15:51

Android中ContentProvider的简单使用的相关文章

Android中SharePreferences的简单实现

Android中提供SharePreferences这种轻量级的数据存储模式,这种模式能够存储少量数据,并能为自身和其他应用提供数据接口.相对于其他数据存储方式,SharePreferences更加轻量.以下是整个SharePreferences实现的代码: xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas

android中ViewConfiguration的简单介绍

android.view.ViewConfiguration Contains methods to standard constants used in the UI for timeouts, sizes, and distances. 常用方法: ViewConfiguration.get(getContext()).getScaledTouchSlop() 官方描述:Distance in pixels a touch can wander before we think the use

Android中AsyncTask的简单用法【转】

在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验.但是在子线程中无法去操作主线程(UI 线程),在子线程中操作UI线程会出现错误.因此android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户.这样就解决了子线程更新UI的问题.但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题.因此android提供了

[原创]Android中LocationManager的简单使用,获取当前位置

Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近某个坐标时对一个已定义Intent的触发等.今天我们就来看看Android 中LocatinManager的简单使用,以获取当前所在的位置为例. 首先,我们需要获取LocationManager的一个实例,这里需要注意的是他的实例只能通过下面这种方式来获取,直接实例化LocationManager是

android中的回调简单认识

首先说一下最抽象的形式--2个类,A类和B类.A类含有1个接口.1个接口变量.(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的"地方";B类实现A中的接口,(可能)含有1个A类实例的引用,并且(可能用A类中为接口变量赋值的方法)将"自己"传递给A类的接口变量. 再将一个小故事: 我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名.这里注意了,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用)

Android中ProgressDialog的简单示例

网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主要的Activity ProgressBarDemo.java Java代码   package com.lveyo.android.demo.progressbar; import android.app.Activity; import android.app.ProgressDialog; i

Android中实现一个简单的逐帧动画(附代码下载)

场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml <?xml version="1.0" encoding="utf-8"?> <animati

Android中Tomcat的简单配置和使用

因为学Android已经有一段时间了,但是在学校,服务器方面是个短板啊,没有专门的服务器拿给我们学生练手,所以只有自己找办法了.当然,Tomcat就是不二的选择了. 在网上看了看资料,还是觉得自己记录下来比较好. 因为我是学Android的,所以jdk什么的已配置好了.如果不知道,请看<java的环境变量配置> 首先我们先要下载Tomcat:http://tomcat.apache.org/(请自行选择版本),我用的是Tomcat 7.0.55. 我下载下来是一个压缩包,选择好路径后,进行解压

Android笔记(二十八) Android中图片之简单图片使用

用户界面很大程度上决定了APP是否被用户接收,为了提供友好的界面,就需要在应用中使用图片了,Android提供了丰富的图片处理功能. 简单使用图片 使用Drawable对象 为Android应用增加了Drawable资源之后,系统会自动在R.java文件中创建一个索引项:R.drawable.fileName,然后在Java中可以通过R.drawable.fileName来获取到该资源的索引(一个int类型的常量),如果要获取实际的Drawable对象,则可以调用Resources的getDra