热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于Androidsqlite3数据库创建使用内容提供者contentProvider及解析者ContentResolver,观察者ContentResolver案例

数据库创建packagecom.jms.rbclient.db;importandroid.content.Context;importandroid.database.sqlite.SQLit



数据库创建

package com.jms.rbclient.db;

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

/**
* Created by liying on 2016/12/27.
*/

public class ProductDBOpenHelper extends SQLiteOpenHelper {
public ProductDBOpenHelper(Context context) {
super(context, "product.db", null, 1);

}

/**
* userid 用户id
* productid 产品id
* prodNum 数量id
* proPropertyid 属性id
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table proinfo (_id integer primary key autoincrement,userid varchar(20),productid varchar(20),prodNum varchar(20),proPropertycolorid varchar(20),proPropertysizeid varchar(20))");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

Androidmanifest节点配置
内容提供者主要代码
package com.jms.rbclient.db.ContentProvider;import android.content.ContentProvider;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import com.jms.rbclient.db.ProductDBOpenHelper;public class CarContentProvider extends ContentProvider {    private static final int SUCCESS = 1;    static UriMatcher mUriMatcher=new UriMatcher(UriMatcher.NO_MATCH);    static {        mUriMatcher.addURI("com.jms.rbclient","proinfo",SUCCESS);    }内容提供者 删除数据
    @Override    public int delete(Uri uri, String selection, String[] selectionArgs) {        // Implement this to handle requests to delete one or more rows.         int code = mUriMatcher.match(uri);        if(code==SUCCESS){            ProductDBOpenHelper helper=new ProductDBOpenHelper(getContext());            final SQLiteDatabase db = helper.getWritableDatabase();            db.delete("proinfo",selection,selectionArgs);            getContext().getContentResolver().notifyChange(uri,null);        }else{        throw new UnsupportedOperationException("Not yet implemented");        }        return 0;    }    @Override    public String getType(Uri uri) {        // at the given URI.        throw new UnsupportedOperationException("Not yet implemented");    }    @Override    public Uri insert(Uri uri, ContentValues values) {        final int code = mUriMatcher.match(uri);        if(code==SUCCESS){            ProductDBOpenHelper helper=new ProductDBOpenHelper(getContext());            final SQLiteDatabase db = helper.getWritableDatabase();            db.insert("proinfo",null,values);            getContext().getContentResolver().notifyChange(uri,null);        }else{        throw new UnsupportedOperationException("Not yet implemented");        }        return null;    }    @Override    public boolean onCreate() {        return false;    }    @Override    public Cursor query(Uri uri, String[] projection, String selection,                        String[] selectionArgs, String sortOrder) {        final int code = mUriMatcher.match(uri);        if(code==SUCCESS){            ProductDBOpenHelper helper=new ProductDBOpenHelper(getContext());            final SQLiteDatabase db = helper.getWritableDatabase();            final Cursor cursor = db.query("proinfo", projection, selection, selectionArgs, null, null, sortOrder);            getContext().getContentResolver().notifyChange(uri,null);            return  cursor;        }else{        throw new UnsupportedOperationException("Not yet implemented");        }    }    @Override    public int update(Uri uri, ContentValues values, String selection,                      String[] selectionArgs) {        final int code = mUriMatcher.match(uri);        if(code==SUCCESS){            ProductDBOpenHelper helper=new ProductDBOpenHelper(getContext());            final SQLiteDatabase db = helper.getWritableDatabase();            db.update("proinfo",values,selection,selectionArgs);            getContext().getContentResolver().notifyChange(uri,null);        }else{        throw new UnsupportedOperationException("Not yet implemented");        }        return 0;    }}


代码工具封装  这里封装的是关于购物的,并不广泛适用

package com.jms.rbclient.db.ContentProvider;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;

/**
* Created by liying on 2016/12/27.
*/

public class DBOUtils {


private Context mContext;
/**
* 在构造方法里面初始化helper对象.
*
* @param context
*/
public DBOUtils(Context context) {

mCOntext= context;
}
/**
* String userid; // 用户id
* String productid; // 产品id
* int prodNum; // 数量
* int proPropertyidcolor; // 属性颜色id
* int proPropertyidsize; // 属性尺寸id
*/

public void insert(String userid,String productid,int prodNum,int proPropertyidcolor,int proPropertyidsize) {

final ContentResolver resolver = mContext.getContentResolver();
Uri uri = Uri.parse("content://com.itheima.rbclient/proinfo");
ContentValues values = new ContentValues();
String userid1=userid; // 用户id
String productid1=productid; // 产品id
String prodNum1=prodNum+""; // 数量
String proPropertyidcolor1=proPropertyidcolor+""; // 属性颜色id
String proPropertyidsize1=proPropertyidsize+""; // 属性尺寸id
values.put("userid",userid1);
values.put("productid",productid1);
values.put("prodNum",prodNum1);
values.put("proPropertycolorid",proPropertyidcolor1);
values.put("proPropertysizeid",proPropertyidsize1);
resolver.insert(uri, values);

}
/**
* userid 用户id
* productid 产品id
* prodNum 数量id
* proPropertyid 属性id
*
*/
/**
* 删除数据 具备 产品id 数量id 属性id
*/
public void deleteSingle(String userid,String productid,int proPropertyidcolor,int proPropertyidsize){
final ContentResolver resolver = mContext.getContentResolver();
Uri uri=Uri.parse("content://com.jms.rbclient/proinfo");
String userid1=userid; // 用户id
String productid1=productid; // 产品id
String proPropertyidcolor1=proPropertyidcolor+""; // 属性颜色id
String proPropertyidsize1=proPropertyidsize+""; // 属性尺寸id
String where="userid=?,productid=?,proPropertyidcolor=?,proPropertyidsize=?";
String[] selectiOnArgs=new String[]{userid1,productid1,proPropertyidcolor1,proPropertyidsize1};
resolver.delete(uri,where,selectionArgs);
}
/**
* 清空数据 具备 产品id 数量id 属性id
*/
public void deleteAll(String userid){
final ContentResolver resolver = mContext.getContentResolver();
Uri uri=Uri.parse("content://com.jms.rbclient/proinfo");
String userid1=userid; // 用户id
String where="userid=?";
String[] selectiOnArgs=new String[]{userid1};
resolver.delete(uri,where,selectionArgs);
}

/**更新数据*/
public void update(String userid,String productid,int proPropertyidcolor,int proPropertyidsize,int newnum,int newcolor,int newsize) {

final ContentResolver resolver = mContext.getContentResolver();
Uri uri = Uri.parse("content://com.jms.rbclient/proinfo");
ContentValues values = new ContentValues();
String newnum1=newnum+""; // 用户id
String newcolor1=newcolor+""; // 属性颜色id
String newsize1=newsize+""; // 属性尺寸id
/*--------------- add begin ---------------*/
String userid1=userid; // 用户id
String productid1=productid; // 产品id
String proPropertyidcolor1=proPropertyidcolor+""; // 属性颜色id
String proPropertyidsize1=proPropertyidsize+""; // 属性尺寸id
/*--------------- add begin ---------------*/
values.put("prodNum",newnum1);
values.put("proPropertycolorid",newcolor1);
values.put("proPropertysizeid",newsize1);
/*--------------- add begin ---------------*/

String where="userid=?,productid=?,proPropertyidcolor=?,proPropertyidsize=?";
String[] selectiOnArgs=new String[]{userid1,productid1,proPropertyidcolor1,proPropertyidsize1};
resolver.update(uri, values,where,selectionArgs);

}
public Cursor query(String userid, String productid, int proPropertyidcolor, int proPropertyidsize){
final ContentResolver resolver = mContext.getContentResolver();
Uri uri=Uri.parse("content://com.jms.rbclient/proinfo");
String userid1=userid; // 用户id
String productid1=productid; // 产品id
String proPropertyidcolor1=proPropertyidcolor+""; // 属性颜色id
String proPropertyidsize1=proPropertyidsize+""; // 属性尺寸id
String selection="userid=?,productid=?,proPropertyidcolor=?,proPropertyidsize=?";
String[] selectiOnArgs=new String[]{userid1,productid1,proPropertyidcolor1,proPropertyidsize1};
return resolver.query(uri,null,selection,selectionArgs,null);
}
public Cursor queryAll(String userid){
final ContentResolver resolver = mContext.getContentResolver();
Uri uri=Uri.parse("content://com.jms.rbclient/proinfo");
String userid1=userid; // 用户id
String selection="userid=?";
String[] selectiOnArgs=new String[]{userid1};
return resolver.query(uri,null,selection,selectionArgs,null);
}
}
fragment 内容观察者监听回调

 mActivity.getContentResolver().registerContentObserver(uri, true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
Toast.makeText(getContext(),"数据有变化",Toast.LENGTH_SHORT).show();
refreshUI();
super.onChange(selfChange);
}
});

以上为之前项目中Android本地数据库的相关代码,同行攻城狮们有建议,请不吝赐教哦!





推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
暖倪2502938803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有