package com.yyquan.jzh.xmpp;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;
import com.yyquan.jzh.entity.XmppChat;
/**
* Created by Administrator on 2016/1/10.
*/
public class XmppFriendMessageProvider extends ContentProvider {
static final String PROVIDER_NAME =
"com.yyquan.jzh.xmpp.chat";
//用来区分操作的是单条数据还是多条数据
private static final int CHAT = 1;
private static final int CHATS = 2;
private static UriMatcher matcher;
private MyDataBaseHelper dbHelper;
private SQLiteDatabase db;
public static final Uri CONTENT_CHAT_URI = Uri.parse("content://" + PROVIDER_NAME + "/chat");
public static final Uri CONTENT_CHATS_URI = Uri.parse("content://" + PROVIDER_NAME + "/chats");
static {
matcher = new UriMatcher(UriMatcher.NO_MATCH);
//为UriMatcher注册一个uri
matcher.addURI(PROVIDER_NAME, "chat", CHAT);
matcher.addURI(PROVIDER_NAME, "chats", CHATS);
}
/**
* 插入一条消息
*
* @param xc
*/
public static void add_message(XmppChat xc) {
ContentValues values = new ContentValues();
values.put("main", xc.getMain());
values.put("user", xc.getUser());
values.put("nickname", xc.getNickname());
values.put("icon", xc.getIcon());
values.put("type", xc.getType());
values.put("content", xc.getContent());
values.put("sex", xc.getSex());
values.put("too", xc.getToo());
values.put("sex", xc.getSex());
values.put("viewtype", xc.getViewType());
values.put("time", xc.getTime());
XmppService.resolver.insert(XmppFriendMessageProvider.CONTENT_CHATS_URI, values);
}
@Override
public boolean onCreate() {
dbHelper = new MyDataBaseHelper(this.getContext());
db = dbHelper.getWritableDatabase();
return db == null ? false : true;
}
@Nullable
@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case CHAT:
return "vnd.android.cursor.item/com.yyquan.jzh";
case CHATS:
return "vnd.android.cursor.dir/com.yyquan.jzh";
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
}
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
switch (matcher.match(uri)) {
case CHAT:
Log.i("provider", "数据查询成功");
return db.query("chat", projection, selection, selectionArgs, null, null, sortOrder);
case CHATS:
Log.i("provider", "数据查询成功");
return db.query("chat", projection, selection, selectionArgs, null, null, sortOrder);
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (matcher.match(uri)) {
case CHATS:
long rowId = db.insert("chat", null, values);
if (rowId > 0) {
Uri wordUri = ContentUris.withAppendedId(uri, rowId);
Log.i("provider", "数据插入成功");
getContext().getContentResolver().notifyChange(wordUri, null);
return wordUri;
}else{
Log.i("provider", "数据插入失败");
}
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int num = 0;
switch (matcher.match(uri)) {
case CHAT:
long id = ContentUris.parseId(uri);
String whereClause = "id=" + id;
if (selection != null && !selection.equals("")) {
whereClause = whereClause + "and" + selection;
}
num = db.delete("chat", whereClause, selectionArgs);
break;
case CHATS:
num = db.delete("chat", selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return num;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int num = 0;
switch (matcher.match(uri)) {
case CHAT:
long id = ContentUris.parseId(uri);
String whereClause = "id=" + id;
if (selection != null && !selection.equals("")) {
whereClause = whereClause + "and" + selection;
}
num = db.update("chat", values, whereClause, selectionArgs);
break;
case CHATS:
num = db.update("chat", values, selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return num;
}
private class MyDataBaseHelper extends SQLiteOpenHelper {
public MyDataBaseHelper(Context context) {
super(context, "xmpp_chat.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//String user, String nickname, String icon, int type, String content, String sex, String too, int viewType, long time
String sql = "create table chat(id integer primary key autoincrement,main text,user text,nickname text,icon text,type integer,content text,sex text,too text,viewtype integer,time text)";
db.execSQL(sql); // 执行一个sql语句
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}