安卓初級教程(3):ContentProvider的運用原理
package com.example.android.provider; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter; //這是第一個先看的java檔,testprovider.java是繼承這個java檔的。 public class ProviderTest extends Activity {
//ProvideTest
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Content Provider和Uri。我們要學習的重中之重就在以下這兩行。
//在這裡getIntent()是意圖從另外一個java檔中獲取數據。如何從另一個java檔中抓取數據,就是借助Uri.parse。
//Uri uri_test是定義項,為了之後在Cusor cur之中抓取數據。
getIntent().setData(Uri.parse("content://com.example.android.provider.testprovider"));
Uri uri_test = getIntent().getData(); //精妙之處就在於這個values和另一個java檔之中的values是處於何種關係?手
ContentValues values = new ContentValues();
values.put("name", "陳翹鈞");
values.put("description", "68206021");
getContentResolver().insert(uri_test, values);
values.put("name", "馮幹傑");
values.put("description", "60746017");
getContentResolver().insert(uri_test, values);
//Content Provider
Cursor cur = managedQuery(uri_test, null, null, null, null);
cur.moveToFirst();
//ArrayList
ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
//ArrayList data
for (int i = 0; i < cur.getCount(); i++) {
item = new HashMap<String, Object>();
item.put("column00", cur.getString(0));
item.put("column01", cur.getString(1));
item.put("column02", cur.getString(2));
data.add(item);
cur.moveToNext();
}
cur.close();
//ArrayList data,mListView01
ListView mListView01 = new ListView(this);
SimpleAdapter adapter = new SimpleAdapter(this, data,
R.layout.main, new String[] {"column00", "column01", "column02" }, new int[] {
R.id.TextView01, R.id.TextView02, R.id.TextView03 });
mListView01.setAdapter(adapter);
setContentView(mListView01);
}
}
package com.example.android.provider; import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.provider.BaseColumns; public class TestProvider extends ContentProvider { private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) {
super(context, "test.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE test (" + BaseColumns._ID
+ " INTEGER PRIMARY KEY," + "name TEXT,"
+ "description TEXT" + ");");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS test");
onCreate(db);
}
}
//DatabaseHelper,databaseHelper
DatabaseHelper databaseHelper;
//Content Providers,onCreate()
@Override
public boolean onCreate() {
databaseHelper = new DatabaseHelper(getContext());
return true;
}
//Content Providers,insert()
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.insert("test", null, values);
return null;
}
//Content Providers,query()
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables("test");
Cursor c = qb.query(db, projection, selection, selectionArgs, null,
null, null);
return c;
}
//Content Providers,delete()
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
//Content Providers,getType()
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
//Content Providers,update()
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
}
安卓初級教程(3):ContentProvider的運用原理的更多相关文章
- 安卓初級教程(5):TabHost的思考
package com.myhost; import android.os.Bundle; import android.view.LayoutInflater; import android.wid ...
- 安卓初級教程(4):sqlite建立資料庫
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ...
- 安卓初級教程(2):SD創建file,儲存與讀寫的方法(1)
package com.sdmadik; import java.io.*; import android.app.Activity; import android.os.Bundle; import ...
- 安卓初級教程(1):@Database(1)
package com.example.android.db01; import android.app.Activity; import android.content.ContentValues; ...
- 安卓中級教程(3):ScrollView
以上是scrollview的圖例,可見srollview是一種滑動功能的控件,亦是非常常見的控件. 一般寫法如下: package com.mycompany.viewscroller; import ...
- 安卓中級教程(11):深入研究餓了麼的各個java檔運作關係(1)
package com.example.ele_me.activity; import android.annotation.SuppressLint; import android.app.Acti ...
- 安卓中級教程(1):@InjectView
package com.mycompany.hungry; import android.annotation.SuppressLint; import android.app.Activity; i ...
- 安卓中級教程(6):annotation的基本用法
package com.example.ele_me.activity; import android.annotation.SuppressLint; import android.app.Acti ...
- 安卓中級教程(2):@InjectView中的對象inject
package com.example.ele_me.util; import java.lang.annotation.Annotation; import java.lang.reflect.Fi ...
随机推荐
- 在c#中的TextBox响应回车键发出“咚”的一声解决方法
在Win7系统的VS2012下的Form中,响应TextBox的KeyDown事件后,当按下回车键时发出"咚"的一声,百度后得到一下这样一个说法: 这是对于 windows 窗口标 ...
- Maven创建工程 WEB
http://www.zuidaima1.com/blog/1618180875144192.htm http://www.zuidaima1.com/blog/1618162161323008.ht ...
- SQL2005 表分区亲测
--增加文件组 alter database Test add filegroup [FG1] go alter database Test add filegroup [FG2] GO alter ...
- 高性能的JavaScript--数据访问(2)
动态作用域 无论是with表达式还是try-catch表达式的catch子句,以及包含()的函数,都被认为是动态作用域.一个动态作用域只因为代码运行而存在.因此无法通过静态分析(查看代码机构)来确定( ...
- nodejs+mysql 断线重连
var mysql = require('mysql'); var conn; function handleError () { conn = mysql.createConnection({ ho ...
- arm工作模式笔记
linux用户态程序即应用程序,在user模式 linux内核运行在svc模式 arm七个模式: usr用户模式 fiq快速中断模式 irq普通中断模式 supervior svc模式 abort ...
- P87LPC760/61/62/64/67/68/69/78/79芯片解密单片机破解价格
NXP恩智浦P87LPC760/61/62/64/67/68/69/78/79芯片解密单片机破解 NXP LPC700系列单片机解密型号: P87LPC759.P87LPC760.P87LPC761. ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- ip二进制计算,与运算算网段
每8位二进制,各位从左到右对应的权值分别是 128,64,32,16, 8,4,2,1 .(即2的n-1次方,n是从右到左当前位的位数) 所以随便拿一个256以内的数给你化为二进制,都可以分解为权值 ...
- 控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...