Sqlite ContentProvider Loader 上下文 对话框
一、整体工程图
二、activity_main.xml
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- <ListView
- android:id="@+id/listView1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true" >
- </ListView>
- </RelativeLayout>
三、add_name.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="240dp"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="姓名:" />
- <EditText
- android:id="@+id/username"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="4dp"
- android:layout_marginLeft="4dp"
- android:layout_marginRight="4dp"
- android:layout_marginTop="16dp"
- android:hint="username"
- android:inputType="textEmailAddress" />
- <Button
- android:id="@+id/btnAdd"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" android:text="确定">
- </Button>
- </LinearLayout>
四、contentmenu.xml
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android" >
- <item
- android:id="@+id/menu_add"
- android:orderInCategory="100"
- android:showAsAction="never"
- android:title="添加">
- </item>
- <item
- android:id="@+id/menu_delete"
- android:orderInCategory="100"
- android:showAsAction="never"
- android:title="删除">
- </item>
- </menu>
五、MainActivity.java
- package com.example.loadermanagerdemo;
- import android.net.Uri;
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.LoaderManager;
- import android.app.LoaderManager.LoaderCallbacks;
- import android.content.ContentResolver;
- import android.content.ContentValues;
- import android.content.CursorLoader;
- import android.content.Loader;
- import android.database.Cursor;
- import android.util.Log;
- import android.view.ContextMenu;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.MenuInflater;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ContextMenu.ContextMenuInfo;
- import android.widget.AdapterView.AdapterContextMenuInfo;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ListView;
- import android.widget.SimpleCursorAdapter;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private LoaderManager manager;
- private ListView listview;
- private AlertDialog alertDialog;
- private SimpleCursorAdapter mAdapter;
- private final String TAG="main";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- listview = (ListView) findViewById(R.id.listView1);
- mAdapter = new SimpleCursorAdapter(MainActivity.this,
- android.R.layout.simple_list_item_1, null,
- new String[] { "name" }, new int[] { android.R.id.text1 },0);
- listview.setAdapter(mAdapter);
- manager = getLoaderManager();
- manager.initLoader(1000, null, callbacks);
- registerForContextMenu(listview);
- }
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.contentmenu, menu);
- }
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
- .getMenuInfo();
- switch (item.getItemId()) {
- case R.id.menu_add:
- AlertDialog.Builder builder = new AlertDialog.Builder(
- MainActivity.this);
- final View view = LayoutInflater.from(MainActivity.this).inflate(
- R.layout.add_name, null);
- Button btnAdd = (Button) view.findViewById(R.id.btnAdd);
- btnAdd.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- EditText etAdd = (EditText) view
- .findViewById(R.id.username);
- String name = etAdd.getText().toString();
- ContentResolver contentResolver = getContentResolver();
- ContentValues contentValues = new ContentValues();
- contentValues.put("name", name);
- Uri uri = Uri
- .parse("content://com.example.loadermanagerdemo.StudentContentProvider/student");
- Uri result = contentResolver.insert(uri, contentValues);
- /*if (result != null) {
- manager.restartLoader(1000, null, callbacks);
- }*/
- alertDialog.dismiss();
- //Log.i(TAG, "添加数据成功,name="+name);
- }
- });
- builder.setView(view);
- alertDialog = builder.show();
- return true;
- case R.id.menu_delete:
- TextView tv = (TextView) info.targetView;
- String name = tv.getText().toString();
- Uri url = Uri
- .parse("content://com.example.loadermanagerdemo.StudentContentProvider/student");
- ContentResolver contentResolver = getContentResolver();
- String where = "name=?";
- String[] selectionArgs = { name };
- int count = contentResolver.delete(url, where, selectionArgs);
- /*if (count == 1) {
- manager.restartLoader(1000, null, callbacks);
- }*/
- //Log.i(TAG, "删除数据成功,name="+name);
- return true;
- default:
- return super.onContextItemSelected(item);
- }
- }
- private LoaderManager.LoaderCallbacks<Cursor> callbacks = new LoaderCallbacks<Cursor>() {
- @Override
- public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
- Uri uri = Uri
- .parse("content://com.example.loadermanagerdemo.StudentContentProvider/student");
- CursorLoader loader = new CursorLoader(MainActivity.this, uri,
- null, null, null, null);
- Log.i("jltxgcy", "onCreateLoader被执行。");
- return loader;
- }
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
- mAdapter.swapCursor(cursor);
- //listview.setAdapter(mAdapter);
- Log.i("jltxgcy", "onLoadFinished被执行。");
- }
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- mAdapter.swapCursor(null);
- Log.i("jltxgcy", "onLoaderReset被执行。");
- }
- };
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- }
六、StudentContentProvider.java
- package com.example.loadermanagerdemo;
- import com.example.loadermanagerdemo.dbhelper.DbHelper;
- import android.content.ContentProvider;
- import android.content.ContentUris;
- import android.content.ContentValues;
- import android.content.UriMatcher;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.net.Uri;
- import android.util.Log;
- public class StudentContentProvider extends ContentProvider {
- private DbHelper helper;
- private final String TAG = "main";
- private final static UriMatcher URI_MATCHAR = new UriMatcher(
- UriMatcher.NO_MATCH);
- private final static int STUDENT = 1;
- private final static int STUDENTS = 2;
- static {
- URI_MATCHAR.addURI(
- "com.example.loadermanagerdemo.StudentContentProvider",
- "student", STUDENTS);
- URI_MATCHAR.addURI(
- "com.example.loadermanagerdemo.StudentContentProvider",
- "student/#", STUDENT);
- }
- public StudentContentProvider() {
- }
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- int count = -1;
- int flag = URI_MATCHAR.match(uri);
- SQLiteDatabase database = helper.getWritableDatabase();
- switch (flag) {
- case STUDENT:
- long stuid = ContentUris.parseId(uri);
- String where_value = "_id=?";
- String[] where_args = { String.valueOf(stuid) };
- count = database.delete("student", where_value, where_args);
- break;
- case STUDENTS:
- count = database.delete("student", selection, selectionArgs);
- break;
- }
- Log.i(TAG, "---->>" + count);
- getContext().getContentResolver().notifyChange(uri, null);
- return count;
- }
- @Override
- public String getType(Uri uri) {
- int flag = URI_MATCHAR.match(uri);
- switch (flag) {
- case STUDENT:
- return "vnd.android.cursor.item/student";
- case STUDENTS:
- return "vnd.android.cursor.dir/students";
- }
- return null;
- }
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- int flag = URI_MATCHAR.match(uri);
- SQLiteDatabase database = helper.getWritableDatabase();
- Uri returnUri = null;
- if (STUDENTS == flag) {
- long id = database.insert("student", null, values);
- returnUri = ContentUris.withAppendedId(uri, id);
- }
- Log.i(TAG, "---->>" + returnUri.toString());
- getContext().getContentResolver().notifyChange(uri, null);
- return returnUri;
- }
- @Override
- public boolean onCreate() {
- helper = new DbHelper(getContext());
- return false;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- Cursor cursor = null;
- SQLiteDatabase database=helper.getReadableDatabase();
- int flag = URI_MATCHAR.match(uri);
- switch (flag) {
- case STUDENTS:
- cursor=database.query(true, "student", null, selection, selectionArgs, null, null, null, null);
- break;
- case STUDENT:
- long stuid=ContentUris.parseId(uri);
- String where_value="_id=?";
- String[] where_args={String.valueOf(stuid)};
- cursor=database.query(true, "student", null, where_value, where_args, null, null, null, null);
- break;
- }
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
- return cursor;
- }
- @Override
- public int update(Uri uri, ContentValues values, String selection,
- String[] selectionArgs) {
- int count = -1;
- int flag = URI_MATCHAR.match(uri);
- SQLiteDatabase database = helper.getWritableDatabase();
- switch (flag) {
- case STUDENTS:
- count = database
- .update("student", values, selection, selectionArgs);
- break;
- case STUDENT:
- long stuid = ContentUris.parseId(uri);
- String where_value = "_id=?";
- String[] where_args = { String.valueOf(stuid) };
- count = database.update("student", values, where_value, where_args);
- break;
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return count;
- }
- }
七、DbHelper.java
- package com.example.loadermanagerdemo.dbhelper;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- public class DbHelper extends SQLiteOpenHelper {
- private static String name="mydb.db";
- private static int version=1;
- public DbHelper(Context context) {
- super(context, name, null, version);
- }
- @Override
- public void onCreate(SQLiteDatabase database) {
- String sql="Create table student(_id integer primary key autoincrement,name varchar(64))";
- database.execSQL(sql);
- ContentValues values=new ContentValues();
- values.put("name", "Jack");
- database.insert("student", null, values);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- }
- }
八、详解
只要开启程序,就会调用StudentContentProvider中的onCreate方法,然后MainActivity中ContentResolver操作StudentContentProvider类,StudentContentProvider操作DbHelper类。
数据库部分内容请看http://www.w3school.com.cn/sql/sql_create_table.asp。
Sqlite ContentProvider Loader 上下文 对话框的更多相关文章
- Android基础总结(三)SQLite,ListView,对话框
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)
本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...
- Android学习笔记总结
第一步: Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序 搭建 Android 的开发环境,以及写一个简单的示例程序 · 在 Win ...
- 19、android面试题整理(自己给自己充充电吧)
(转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 ...
- Java 面试/笔试题神整理 [Java web and android]
Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...
- 【转】 71道经典Android面试题和答案,重要知识点都包含了
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- Android面试总结 (转)
1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...
- 经典71道Android试题及答案
本文为开发者奉献了70道经典Android面试题加答案--重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!! 1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放 ...
- android基础小结
(注:此小结文档在全屏模式下观看效果最佳) 2016年3月1日,正式开始了我的android学习之路. 最最开始的,当然是学习怎样搭载环境了,然而苦逼的我在win10各种坑爹的指引下还是安装了一个星期 ...
随机推荐
- 基于Visual C++2013拆解世界五百强面试题--题16-进制分析
清写出下列代码的输出内容 #include <stdio.h> int main() { int a = -1, b = -12, c = -123, d = -1234; printf( ...
- VS2008编译iconv静态链接库
iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码 iconv最新版本号仅仅支持Min ...
- JavaScript 数字相关的转换和方法
类型判断 isNaN - 是否是 NaN(Not a Number).主要用来判断 NaN 是否是 NaN,因为 NaN == NaN 是 false. isNaN(NaN); // tr ...
- CSS的display、hover、overflow、©(版权符号)、borer-radius(边框圆角)
一.display: none 隐藏 block显示 visibility:hidden隐藏 visible显示 display:none和visibility:hidden这两个属性对应的值 ...
- [译]SSRS 报表版本控制
问题 如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 SQL Server 2008 R2的 Reporting Services (SSRS) 开始,微软视图为减轻 ...
- 详解虚拟机(windows)下搭建SVN服务器
安装前的准备 1.虚拟机的用户名最好是英文 2.严格按照步骤做,否则有可能不成功 3.如果安装失败,在虚拟机下的控制板完全下载VisualSVN-Server-2.7.7,重新安装 软件下载地址: h ...
- C - N皇后问题(搜索)
Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合 ...
- JS日历控件
<input type="text" id="st" name="st" onclick="return Calendar( ...
- JDBC_获取插入记录的主键值
<span style="font-size:24px;">package src.com.JDBC2DAO.java; import static org.junit ...
- Recursive Depth first search graph(adj matrix)
1 深度优先遍历邻接矩阵 1 邻接矩阵初始化 2 访问数组初始化 3 深度优先遍历邻接矩阵图 算法如下: bool MGraph[128][128]; bool visit[128]; int vex ...