安卓初級教程(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 ...
随机推荐
- tp框架之AJAX
实现一个AJAX添加并显示数据的例子 控制器 <?php namespace Home\Controller; use Think\Controller; class AjaxControlle ...
- C++ Tips and Tricks
整理了下在C++工程代码中遇到的技巧与建议. 0x00 巧用宏定义. 经常看见程序员用 enum 值,打印调试信息的时候又想打印数字对应的字符意思.见过有人写这样的代码 if(today == MON ...
- thinkphp验证是否登录并跳转
CommonController.class.php <?php namespace Admin\Controller; use Think\Controller; class CommonCo ...
- 设计模式 之 原型模式(ProtoType)
什么时原型模式 或 原型模式的定义: 用原型实例来指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式的特点: 1),它是面向接口编程, 2),原型模式的新对象是对原型实例的一个克隆 ...
- Spring事务
1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.@Transactional 的 ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- monodroid 调用 JNI Native 的一些问题
在Android版本开发的过程中,需要使用一些用JNI开发的NDK的native库.这里谈一谈踩到的坑,给大家参考. 虽然java的程序我还算熟悉,但是没有了解过 JNI Native 的开发,一般是 ...
- e.preventDefault() e.stopPropagation()和return false的区别
e.preventDefault(); //阻止事件的默认行为,比如a标签的转向,但不阻止事件的冒泡传播e.stopPropagation() //阻止事件的冒泡传播,但不阻止其默认行为returne ...
- apache flink 入门
配置环境 包括 JAVA_HOME jobmanager.rpc.address jobmanager.heap.mb 和 taskmanager.heap.mb taskmanager.number ...
- android开发中使不同的listview同时联动
在做一个Android程序时,需要在一个屏幕上显示两个不同的listview,开始用< linearlayout>包裹这两个listview在<ScrollView >设置时, ...