package andy.ham;
import java.util.Calendar;
import java.util.HashMap;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import andy.ham.Fields.DiaryColumns;
public class LifeDiaryContentProvider extends ContentProvider{
//定义一:日记本中变量
private static final String DATABASE_NAME = "database";
private static final int DATABASE_VERSION = 3;
private static final String DIARY_TABLE_NAME = "diary";
private static final int DIARIES = 1;
private static final int DIARY_ID = 2;
//定义二:UriMatcher。用来匹配URI的类型,是单一的数据请求还是全部数据请求
private static final UriMatcher sUriMatcher;
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(Fields.AUTHORITY, "diaries", DIARIES);
sUriMatcher.addURI(Fields.AUTHORITY, "diaries/#", DIARY_ID);
}
/*定义三:DatabaseHelper。DatabaseHelper是继承SQLiteOpenHelper的
* SQLiteOpenHelper是一个抽象类,有3个函数 onCreate、onUpdate、onOpen(一般不用)
*/
private DatabaseHelper mOpenHelper;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("jinyan", "onCreate(SQLiteDatabase db)");
String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " ("
+ DiaryColumns._ID + " INTEGER PRIMARY KEY,"
+ DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY
+ " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
//
sql ="CREATE TABLE " + DIARY_TABLE_NAME + " ("
+ DiaryColumns._ID + " INTEGER PRIMARY KEY,"
+ DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY
+ " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
//
Log.i("jinyan", "sql="+sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("jinyan",
" onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)="
+ newVersion);
db.execSQL("DROP TABLE IF EXISTS diary");
onCreate(db);
}
}
//定义四:getFormateCreatedDate。一个获取当前时间的函数
public static String getFormateCreatedDate() {
Calendar calendar = Calendar.getInstance();
String created = calendar.get(Calendar.YEAR) + "年"
+ calendar.get(Calendar.MONTH) + "月"
+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
+ calendar.get(Calendar.HOUR_OF_DAY) + "时"
+ calendar.get(Calendar.MINUTE) + "分";
return created;
}
@Override
public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
//SQLiteQueryBuilder是一个构造sql查询语句的辅助类
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
//UriMatcher.match(uri)根据返回值可以判断这次查询请求时,他是请求的全部数据还是某个id的数据
switch (sUriMatcher.match(uri)) {
//如果请求是DIARIES只需执行setTables(DIARY_TABLE_NAME)
case DIARIES:
qb.setTables(DIARY_TABLE_NAME);
break;
//如果返回值是DIARY_ID,还需要加入where条件
case DIARY_ID:
qb.setTables(DIARY_TABLE_NAME);
qb.appendWhere(DiaryColumns._ID + "="
+ uri.getPathSegments().get(1));
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
String orderBy;
if (TextUtils.isEmpty(sortOrder)) {
orderBy = Fields.DiaryColumns.DEFAULT_SORT_ORDER;
} else {
orderBy = sortOrder;
}
//关键的查询语句,query()参数为:数据库实例、字符串数组、where部分、字符串数组里面每一项依次代替第三个参数出现问号
//null表示sql语句groupby、第二个null表示sql语句having部分、最后一个参数是排序
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null,
null, orderBy);
return c;
}
//返回一个给Uri制定数据的MIME类型,他的返回值如果是以vnd.android.cursor.item开头,那么Uri是单条数据
//如果是以vnd.android.cursor.dir开头的,说明Uri指定的全部数据
public String getType(Uri uri) {
switch (sUriMatcher.match(uri)) {
case DIARIES:
return DiaryColumns.CONTENT_TYPE;
case DIARY_ID:
return DiaryColumns.CONTENT_ITEM_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
//判断uri,如果这个uri不是DIARIES类型的,那么这个uri就是一个非法的uri
if (sUriMatcher.match(uri) != DIARIES) {
throw new IllegalArgumentException("Unknown URI " + uri);
}
ContentValues values;
if (initialValues != null) {
values = new ContentValues(initialValues);
} else {
values = new ContentValues();
}
if (values.containsKey(Fields.DiaryColumns.CREATED) == false) {
values.put(Fields.DiaryColumns.CREATED, getFormateCreatedDate());
}
if (values.containsKey(Fields.DiaryColumns.TITLE) == false) {
Resources r = Resources.getSystem();
values.put(Fields.DiaryColumns.TITLE, r
.getString(android.R.string.untitled));
}
if (values.containsKey(Fields.DiaryColumns.BODY) == false) {
values.put(Fields.DiaryColumns.BODY, "");
}
//得到一个SQLiteDatabase的实例
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
//负责插入一条记录到数据库当中
long rowId = db.insert(DIARY_TABLE_NAME, Fields.DiaryColumns.BODY, values);
if (rowId > 0) {
Uri diaryUri = ContentUris.withAppendedId(
Fields.DiaryColumns.CONTENT_URI, rowId);
//注意:insert()返回的是一个uri,而不是一个记录id
return diaryUri;
}
throw new SQLException("Failed to insert row into " + uri);
}
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
//getWritableDatabase()方法得到一个string的list
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
//得到rowId的值,如果get(0)那值就为diaries
String rowId = uri.getPathSegments().get(1);
//标准的SQLite删除操作,第一个参数是数据表的名字,第二个相当于SQL语句中的where部分。
return db.delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null);
}
@Override
public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) {
//getWritableDatabase()方法得到SQLiteDatabase的实例
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
//得到rowId的值
String rowId = uri.getPathSegments().get(1);
//最后在调用update语句执行更新操作
return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "="
+ rowId, null);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android应用源码之日记本.zip项目安卓应用源码下载
共33个文件
class:13个
java:5个
xml:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 9 浏览量
2022-03-08
18:12:03
上传
评论
收藏 546KB ZIP 举报
温馨提示
Android应用源码之日记本.zip项目安卓应用源码下载Android应用源码之日记本.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
资源推荐
资源详情
资源评论
收起资源包目录
Android应用源码之日记本.zip (33个子文件)
Android应用源码之日记本
Android应用源码之日记本
LifeDiary
AndroidManifest.xml 1KB
res
layout
diary_edit.xml 1KB
diary_row.xml 735B
diary_list.xml 554B
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 3KB
drawable-hdpi
icon.png 4KB
values
strings.xml 958B
src
andy
ham
DiaryEditor.java 3KB
Fields.java 1KB
LifeDiaryContentProvider.java 7KB
LifeDiary.java 4KB
bin
classes.dex 14KB
andy
ham
Fields.class 441B
DiaryEditor.class 4KB
R.class 461B
LifeDiaryContentProvider.class 6KB
DiaryEditor$1.class 1KB
R$layout.class 437B
R$attr.class 310B
LifeDiaryContentProvider$DatabaseHelper.class 2KB
R$id.class 499B
R$string.class 961B
Fields$DiaryColumns.class 1001B
R$drawable.class 370B
LifeDiary.class 4KB
LifeDiary.apk 22KB
resources.ap_ 14KB
.classpath 280B
default.properties 364B
.project 845B
gen
andy
ham
R.java 2KB
diary.doc 591KB
共 33 条
- 1
资源评论
yxkfw
- 粉丝: 81
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 面向初学者的 Java 教程(包含 500 个代码示例).zip
- 阿里云OSS Java版SDK.zip
- 阿里云api网关请求签名示例(java实现).zip
- 通过示例学习 Android 的 RxJava.zip
- 通过多线程编程在 Java 中发现并发模式和特性 线程、锁、原子等等 .zip
- 通过在终端中进行探索来学习 JavaScript .zip
- 通过不仅针对初学者而且针对 JavaScript 爱好者(无论他们的专业水平如何)设计的编码挑战,自然而自信地拥抱 JavaScript .zip
- 适用于 Kotlin 和 Java 的现代 JSON 库 .zip
- AppPay-安卓开发资源
- yolo5实战-yolo资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功