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的運用原理的更多相关文章

  1. 安卓初級教程(5):TabHost的思考

    package com.myhost; import android.os.Bundle; import android.view.LayoutInflater; import android.wid ...

  2. 安卓初級教程(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 ...

  3. 安卓初級教程(2):SD創建file,儲存與讀寫的方法(1)

    package com.sdmadik; import java.io.*; import android.app.Activity; import android.os.Bundle; import ...

  4. 安卓初級教程(1):@Database(1)

    package com.example.android.db01; import android.app.Activity; import android.content.ContentValues; ...

  5. 安卓中級教程(3):ScrollView

    以上是scrollview的圖例,可見srollview是一種滑動功能的控件,亦是非常常見的控件. 一般寫法如下: package com.mycompany.viewscroller; import ...

  6. 安卓中級教程(11):深入研究餓了麼的各個java檔運作關係(1)

    package com.example.ele_me.activity; import android.annotation.SuppressLint; import android.app.Acti ...

  7. 安卓中級教程(1):@InjectView

    package com.mycompany.hungry; import android.annotation.SuppressLint; import android.app.Activity; i ...

  8. 安卓中級教程(6):annotation的基本用法

    package com.example.ele_me.activity; import android.annotation.SuppressLint; import android.app.Acti ...

  9. 安卓中級教程(2):@InjectView中的對象inject

    package com.example.ele_me.util; import java.lang.annotation.Annotation; import java.lang.reflect.Fi ...

随机推荐

  1. webServer-----Spring 集成cxf笔录

    目前webserver主要有俩中方式:1,传统的webserver标准集成方式-生成WSDL的xml文档.       2, 基于restful风格的webserver java RESTful We ...

  2. Python,ElementTree模块处理XML时注释无法读取和保存的问题

    from xml.etree import ElementTree class CommentedTreeBuilder ( ElementTree.XMLTreeBuilder ): def __i ...

  3. c#程序中对密码进行加密的方法

    在ADO.NET中,向数据库添加数据时,怎样对数据中的密码进行加密?(也就是说在数据表中也看不到用户的密 码,只是一些经过编译后的字符串,以防止数据库管理员利用用户的密码进行非法操作.)    首先, ...

  4. EditText取消自动调用键盘事件(方法之一)

    直接上代码,这只是其中一种方法: 重点在于是在该EditText的父空间中设置 <LinearLayout android:layout_width="match_parent&quo ...

  5. 自己用的jquery经常用的工具command

    var Cmd = { Entity: { QueryString: {}, }, RootPath: function () { var pathName = window.location.pat ...

  6. 修改socket为keepAlive

    参考文章:http://blog.csdn.net/ctthuangcheng/article/details/8596818 [root@mdw- gpadmin]# vi /etc/sysctl. ...

  7. win10 下oracle tns通过IP无法访问的解决办法

     在Oracle安装目录下\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN下找到listener.ora文件,编辑对应项为: LISTE ...

  8. 第二天 ci执行流程

    第二天 ci执行流程 welcome 页面 this this->load 单入口框架index.php 两个文件夹 system application定义 定义常亮路径 载入 codeign ...

  9. 4.3 多线程进阶篇<中>(GCD)

    更正:队列名称的作用的图中,箭头标注的有些问题,已修正 本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Gith ...

  10. 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言

    1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...