--------------------------------------------AndroidManifest.xml----------------------------------

<?xmlversion="1.0"encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

package="com.kawa.ch23"

android:versionCode="1"

android:versionName="1.0">

<uses-sdkandroid:minSdkVersion="8"/>

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name">

<uses-libraryandroid:name="android.test.runner"/>

<activity

android:label="@string/app_name"

android:name=".MainActivity">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

<provider

android:authorities="com.kawa.ch23.provider.myprovider"

android:name=".provider.MyProvider">

</provider>

<activityandroid:name="com.kawa.ch23.ItemActivity"></activity>

</application>

<instrumentationandroid:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.kawa.ch23"android:label="TestsforMyApp"/>

</manifest>

--------------------------------------------Layoutactivity_main.java----------------------------

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

<TableLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:stretchColumns="1">

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="姓名"/>

<EditText

android:id="@+id/edtname"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="fy"/>

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="年龄"/>

<EditText

android:id="@+id/edtage"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="21"/>

</TableRow>

</TableLayout>

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:id="@+id/btnadd"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="新增"/>

<Button

android:id="@+id/btnqueryall"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="查询所有"/>

</LinearLayout>

<ListView

android:id="@+id/lvall"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

</ListView>

</LinearLayout>

--------------------------------------------Layoutitem.xml--------------------------------------

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<TableLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:stretchColumns="1">

<TableRow>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="ID"/>

<EditText

android:id="@+id/edt_item_id"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="姓名"/>

<EditText

android:id="@+id/edt_item_name"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="年龄"/>

<EditText

android:id="@+id/edt_item_age"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

</TableRow>

</TableLayout>

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:id="@+id/btndel"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="删除"/>

<Button

android:id="@+id/btnupdate"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="更新"/>

</LinearLayout>

</LinearLayout>

--------------------------------------------Layoutlist_item.xml----------------------------------

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:id="@+id/tvId"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

/>

<TextView

android:id="@+id/tvname"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"/>

<TextView

android:id="@+id/tvage"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"/>

</LinearLayout>

--------------------------------------------MainActivity.java--------------------------------------

packagecom.kawa.ch23;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importcom.kawa.ch23.model.Person;

importcom.kawa.ch23.util.Const;

importandroid.app.Activity;

importandroid.content.ContentResolver;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.database.Cursor;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.AdapterView;

importandroid.widget.AdapterView.OnItemClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.ListView;

importandroid.widget.SimpleAdapter;

importandroid.widget.Toast;

/**

*

*项目名称:com.kawa.ch23

*类名称:MainActivity

*类描述:

*创建人:方勇

*创建时间:2012-12-14下午9:38:39

*Copyright(c)方勇-版权所有

*/

publicclassMainActivityextendsActivity{

privateButtonbtn_add,btn_queryall;

privateEditTextfield_name,field_age;

privateListViewlistview;

privateList<Person>persons;

privateSimpleAdaptersimpleAdapter;

privateHandlerhandler=newHandler(){//异步消息

@Override

publicvoidhandleMessage(Messagemsg){

List<Map<String,Object>>data=(List<Map<String,Object>>)msg.obj;

System.out.println(data.size());

simpleAdapter=newSimpleAdapter(MainActivity.this,data,

R.layout.list_item,newString[]{"id","name","age"},newint[]{

R.id.tvId,R.id.tvname,R.id.tvage});

listview.setAdapter(simpleAdapter);

}

};

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

persons=newArrayList<Person>();

findViews();

setListeners();

}

privatevoidfindViews(){

btn_queryall=(Button)this.findViewById(R.id.btnqueryall);

btn_add=(Button)this.findViewById(R.id.btnadd);

field_name=(EditText)this.findViewById(R.id.edtname);

field_age=(EditText)this.findViewById(R.id.edtage);

listview=(ListView)this.findViewById(R.id.lvall);

}

privatevoidsetListeners(){

btn_add.setOnClickListener(addOnClickListener);

//查询所有

btn_queryall.setOnClickListener(queryOnClickListener);

listview.setOnItemClickListener(onItemClickListener);

}

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

if(resultCode==2){

MyThreadthread=newMyThread(MainActivity.this);

thread.start();

}

}

privateOnClickListeneraddOnClickListener=newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

ContentResolvercontentResolver=MainActivity.this

.getContentResolver();

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValuesvalues=newContentValues();

values.put("name",field_name.getText().toString());

values.put("age",field_age.getText().toString());

Uriresult=contentResolver.insert(url,values);

System.out.println(result.toString());

if(ContentUris.parseId(result)>0){

Toast.makeText(MainActivity.this,"添加成功",

Toast.LENGTH_LONG).show();

//添加成功后再启动线程查询

MyThreadthread=newMyThread(MainActivity.this);

thread.start();

}

}

};

privateOnClickListenerqueryOnClickListener=newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

MyThreadthread=newMyThread(MainActivity.this);

thread.start();

}

};

privateOnItemClickListeneronItemClickListener=newOnItemClickListener(){

@Override

publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,

longid){

System.out.println("position:"+position);

Personperson=persons.get(position);

Bundlebundle=newBundle();

bundle.putInt("id",person.getId());

bundle.putString("name",person.getName());

bundle.putInt("age",person.getAge());

Intentintent=newIntent(MainActivity.this,

ItemActivity.class);

intent.putExtra("item",bundle);

startActivityForResult(intent,1);

}

};

classMyThreadextendsThread{

Contextcontext;

publicMyThread(Contextcontext){

//一定要清空。否则会有问题,每执行一次都会把之前的全部的item加进去

persons.clear();

listview.setAdapter(null);

this.context=context;

}

@Override

publicvoidrun(){

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursorcursor=context.getContentResolver().query(url,

newString[]{"_id","name","age"},null,null,"_id");

while(cursor.moveToNext()){

Personperson=newPerson();

person.setId(cursor.getInt(cursor.getColumnIndex("_id")));

person.setName(cursor.getString(cursor.getColumnIndex("name")));

person.setAge(cursor.getInt(cursor.getColumnIndex("age")));

persons.add(person);

}

cursor.close();

List<Map<String,Object>>data=newArrayList<Map<String,Object>>();

Map<String,Object>map=null;

for(inti=0;i<persons.size();i++){

map=newHashMap<String,Object>();

map.put("id",persons.get(i).getId());

map.put("name",persons.get(i).getName());

map.put("age",persons.get(i).getAge());

data.add(map);

}

Messagemsg=handler.obtainMessage();

msg.obj=data;

handler.sendMessage(msg);

}

}

}

--------------------------------------------ItemActivity.java--------------------------------------

packagecom.kawa.ch23;

importcom.kawa.ch23.util.Const;

importandroid.app.Activity;

importandroid.content.ContentResolver;

importandroid.content.ContentValues;

importandroid.content.Intent;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.Toast;

/**

*

*项目名称:com.kawa.ch23

*类名称:ItemActivity

*类描述:

*创建人:方勇

*创建时间:2012-12-14下午9:45:04

*Copyright(c)方勇-版权所有

*/

publicclassItemActivityextendsActivity{

privateEditTextfield_name;

privateEditTextfield_age;

privateEditTextfield_id;

privateButtonbtn_del,btn_update;

//传数据

privateIntentintent;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.item);

findViews();

setListeners();

intent=getIntent();

Bundlebundle=intent.getBundleExtra("item");//选中的数据

intid=bundle.getInt("id");

Stringname=bundle.getString("name");

intage=bundle.getInt("age");

field_id.setText(String.valueOf(id));

field_name.setText(name);

field_age.setText(String.valueOf(age));

}

privatevoidfindViews(){

field_id=(EditText)this.findViewById(R.id.edt_item_id);

field_id.setEnabled(false);//控制不可用

field_name=(EditText)this.findViewById(R.id.edt_item_name);

field_age=(EditText)this.findViewById(R.id.edt_item_age);

//得到传过来的数据

btn_del=(Button)this.findViewById(R.id.btndel);

btn_update=(Button)this.findViewById(R.id.btnupdate);

}

privatevoidsetListeners(){

btn_del.setOnClickListener(delOnClickListener);

btn_update.setOnClickListener(updateOnClickListener);

}

privateOnClickListenerupdateOnClickListener=newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

ContentResolvercontentResolver=ItemActivity.this.getContentResolver();

//构建Uri

Stringurl="content://"+Const.PROVIDER_URL+"/person/"

+field_id.getText();

Uriuri=Uri.parse(url);

ContentValuesvalues=newContentValues();

values.put("name",field_name.getText().toString());

values.put("age",Integer.parseInt(field_age.getText().toString()));

intresult=contentResolver.update(uri,values,null,null);

System.out.println("updateresult:"+result);

if(result>=1){

Toast.makeText(ItemActivity.this,"更新成功",Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);//设置返回结果

ItemActivity.this.finish();//销毁

}

}

};

privateOnClickListenerdelOnClickListener=newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

ContentResolvercontentResolver=ItemActivity.this.getContentResolver();

//构建Uri

Stringurl="content://"+Const.PROVIDER_URL+"/person/"

+field_id.getText();

Uriuri=Uri.parse(url);

intresult=contentResolver.delete(uri,null,null);

System.out.println("deleteresult:"+result);

if(result>=1){

Toast.makeText(ItemActivity.this,"删除成功",Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);

ItemActivity.this.finish();//销毁

}

}

};

}

--------------------------------------------util目录Const.java-----------------------------------

publicclassConst{

publicstaticStringPROVIDER_URL="com.kawa.ch23.provider.myprovider";

}

--------------------------------------------provider目录MyProvider.java-----------------------

packagecom.kawa.ch23.provider;

importandroid.content.ContentProvider;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.content.UriMatcher;

importandroid.database.Cursor;

importandroid.net.Uri;

importcom.kawa.ch23.db.DBHelper;

importcom.kawa.ch23.util.Const;

/**

*

*项目名称:com.kawa.ch23

*类名称:MyProvider

*类描述:提供者

*创建人:方勇

*创建时间:2012-12-14下午9:49:38

*Copyright(c)方勇-版权所有

*/

publicclassMyProviderextendsContentProvider{

privateDBHelperdbHelper;

//定义一个UriMatcher类

privatestaticfinalUriMatcherMATCHER=newUriMatcher(

UriMatcher.NO_MATCH);

privatestaticfinalintPERSONS=1;

privatestaticfinalintPERSON=2;

static{

MATCHER.addURI(Const.PROVIDER_URL,"person",PERSONS);

MATCHER.addURI(Const.PROVIDER_URL,"person/#",PERSON);

}

@Override

publicbooleanonCreate(){

System.out.println("---oncreate----");

dbHelper=newDBHelper(this.getContext());

dbHelper.open();

returnfalse;

}

//查询数据

@Override

publicCursorquery(Uriuri,String[]projection,Stringselection,

String[]selectionArgs,StringsortOrder){

switch(MATCHER.match(uri)){

casePERSONS:

//查询所有的数据

returndbHelper.findList("person",projection,selection,selectionArgs,

null,null,sortOrder);

casePERSON:

//查询某个ID的数据

//通过ContentUris这个工具类解释出ID

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

if(!"".equals(selection)&&selection!=null){

where=selection+"and"+where;

}

returndbHelper.findList("person",projection,where,selectionArgs,null,

null,sortOrder);

default:

thrownewIllegalArgumentException("unknowuri"+uri.toString());

}

}

//返回当前操作的数据的mimeType

@Override

publicStringgetType(Uriuri){

switch(MATCHER.match(uri)){

casePERSONS:

return"vnd.android.cursor.dir/person";

casePERSON:

return"vnd.android.cursor.item/person";

default:

thrownewIllegalArgumentException("UnkwonUri:"+uri.toString());

}

}

//插入数据

@Override

publicUriinsert(Uriuri,ContentValuesvalues){

UriinsertUri=null;

switch(MATCHER.match(uri)){

casePERSONS:

longrowid=dbHelper.insert("person",values);

insertUri=ContentUris.withAppendedId(uri,rowid);

break;

default:

thrownewIllegalArgumentException("UnkwonUri:"+uri.toString());

}

returninsertUri;

}

//删除数据

@Override

publicintdelete(Uriuri,Stringselection,String[]selectionArgs){

intcount=0;

switch(MATCHER.match(uri)){

casePERSONS:

count=dbHelper.delete("person",selection,selectionArgs);

returncount;

casePERSON:

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

if(selection!=null&&!"".equals(selection)){

where=selection+"and"+where;

}

count=dbHelper.delete("person",where,selectionArgs);

returncount;

default:

thrownewIllegalArgumentException("UnkwonUri:"+uri.toString());

}

}

//更新数据

@Override

publicintupdate(Uriuri,ContentValuesvalues,Stringselection,

String[]selectionArgs){

intcount=0;

switch(MATCHER.match(uri)){

casePERSONS:

count=dbHelper.update("person",values,selection,selectionArgs);

break;

casePERSON:

//通过ContentUri工具类得到ID

longid=ContentUris.parseId(uri);

Stringwhere="_id="+id;

if(selection!=null&&!"".equals(selection)){

where=selection+"and"+where;

}

count=dbHelper.update("person",values,where,selectionArgs);

break;

default:

thrownewIllegalArgumentException("UnkwonUri:"+uri.toString());

}

returncount;

}

}

--------------------------------------------provider目录Test.java-------------------------------

packagecom.kawa.ch23.provider;

importcom.kawa.ch23.util.Const;

importandroid.content.ContentResolver;

importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.net.Uri;

importandroid.test.AndroidTestCase;

publicclassTestextendsAndroidTestCase{

/*保存*/

publicvoidtestInsert()throwsException{

ContentResolvercontentResolver=this.getContext()

.getContentResolver();

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValuesvalues=newContentValues();

values.put("name","jiahui2");

values.put("age",20);

contentResolver.insert(url,values);

}

/*删除*/

publicvoidtestDelete()throwsException{

ContentResolvercontentResolver=this.getContext()

.getContentResolver();

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

//ContentValuesvalues=newContentValues();

contentResolver.delete(url,null,null);

}

/*更新*/

publicvoidtestUpdate()throwsException{

ContentResolvercontentResolver=this.getContext()

.getContentResolver();

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

ContentValuesvalues=newContentValues();

values.put("name","jiahui2");

values.put("age",20);

contentResolver.update(url,values,null,null);

}

/*查询*/

publicvoidtestQuery()throwsException{

ContentResolvercontentResolver=this.getContext()

.getContentResolver();

Uriurl=Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursorcursor=contentResolver.query(url,newString[]{"_id",

"name","age"},null,null,"_id");

while(cursor.moveToNext()){

System.out.println("_id:"+cursor.getInt(cursor.getColumnIndex("_id")));

System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));

System.out.println("age:"+cursor.getInt(cursor.getColumnIndex("age")));

}

}

}

--------------------------------------------model目录Person.java-------------------------------

packagecom.kawa.ch23.model;

importjava.io.Serializable;

publicclassPersonimplementsSerializable{

privateintid;

privateStringname;

privateintage;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

@Override

publicinthashCode(){

finalintprime=31;

intresult=1;

result=prime*result+age;

result=prime*result+id;

result=prime*result+((name==null)?0:name.hashCode());

returnresult;

}

@Override

publicbooleanequals(Objectobj){

if(this==obj)

returntrue;

if(obj==null)

returnfalse;

if(getClass()!=obj.getClass())

returnfalse;

Personother=(Person)obj;

if(age!=other.age)

returnfalse;

if(id!=other.id)

returnfalse;

if(name==null){

if(other.name!=null)

returnfalse;

}elseif(!name.equals(other.name))

returnfalse;

returntrue;

}

@Override

publicStringtoString(){

return"Person[id="+id+",name="+name+",age="+age+"]";

}

}

--------------------------------------------db目录DBHelper.java--------------------------------

packagecom.kawa.ch23.db;

importcom.kawa.ch23.util.LogOut;

importandroid.content.ContentValues;

importandroid.content.Context;

importandroid.database.Cursor;

importandroid.database.SQLException;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteOpenHelper;

/**

*

*项目名称:com.kawa.ch21

*

*类名称:DBHelper

*

*类描述:Sqlite3数据库操作工具类

*

*创建人:fy

*

*创建时间:2012-9-7上午9:27:24

*

*Copyright(c)方勇-版权所有

*/

publicclassDBHelper{

//DDL操作

privatestaticDatabaseHelperdbHelper;

//DML操作

privatestaticSQLiteDatabasedb;

//数据库名

privatestaticfinalStringDATABASE_NAME="kawa.db";

//数据库版本

privatestaticfinalintDATABASE_VERSION=1;

//上下文环境

privatefinalContextmCtx;

/*SQliteOpenHelper是一个抽象类,来管理数据库的创建和版本的管理*/

privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{

DatabaseHelper(Contextcontext){

super(context,DATABASE_NAME,null,DATABASE_VERSION);

}

@Override

publicvoidonCreate(SQLiteDatabasedb){

Stringsql="createtableIFNOTEXISTSperson(_idintegerprimarykeyautoincrement,nametext,ageinteger)";

LogOut.out("fy","sql["+sql+"]");

db.execSQL(sql);

}

@Override

publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){

System.out.println("upgradeadatabase");

}

}

publicDBHelper(Contextctx){

this.mCtx=ctx;

}

publicDBHelperopen()throwsSQLException{

dbHelper=newDatabaseHelper(mCtx);

db=dbHelper.getWritableDatabase();

returnthis;

}

publicvoidcloseclose(){

db.close();

dbHelper.close();

}

/**

*插入数据

*参数:tableName表名

*initialValues要插入的列对应值

**/

publiclonginsert(StringtableName,ContentValuesinitialValues){

returndb.insert(tableName,null,initialValues);

}

/**

*删除数据

*参数:tableName表名

*deleteCondition删除的条件

*deleteArgs如果deleteCondition中有“?”号,将用此数组中的值替换

**/

publicintdelete(StringtableName,StringdeleteCondition,

String[]deleteArgs){

returndb.delete(tableName,deleteCondition,deleteArgs);

}

/**

*更新数据

*参数:tableName表名

*initialValues要更新的列

*selection更新的条件

*selectArgs如果selection中有“?”号,将用此数组中的值替换

**/

publicintupdate(StringtableName,ContentValuesinitialValues,

Stringselection,String[]selectArgs){

intreturnValue=db

.update(tableName,initialValues,selection,selectArgs);

returnreturnValue;

}

/**

*取得一个列表

*参数:tableName表名

*columns返回的列

*selection查询条件

*selectArgs如果selection中有“?”号,将用此数组中的值替换

**/

publicCursorfindList(StringtableName,String[]columns,Stringselection,

String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy){

returndb.query(tableName,columns,selection,selectionArgs,groupBy,

having,orderBy);

}

}

--------------------------------------------结果----------------------------------------------------

ch023 Android ContentProvider(第二部分)_第1张图片

ch023 Android ContentProvider(第二部分)_第2张图片

<!--EndFragment-->

更多相关文章

  1. 老罗Android开发视频教程( android解析json数据 )4集集合
  2. WPF核心的技术--数据绑定
  3. 让WebAPI 返回JSON格式的数据实例教程
  4. 怎么在EXECL文件中同时导入数据和插入图片?
  5. 关于.net C# Sql数据库SQLHelper类实例代码
  6. Catalog Service - 解析微软微服务架构实例代码
  7. 什么是MVVM架构和数据绑定?
  8. 介绍一个微软开源项目网站--CodePlex
  9. 总结EF通用数据层封装类实例详解

随机推荐

  1. Android网络通信(7):NFC
  2. android 笔记 --- InputFilter实现EditTe
  3. Android开心消消乐代码实例详解
  4. 如何判断android activity是否运行
  5. Android中使用Handler&Looper更新UI范例
  6. 为什么很多机器不能升级Android 4.3 (4.0
  7. Android 是Google开发的基于Linux平台的
  8. android下调用lua脚本方法
  9. android 解析服务器数据使用json还是xml
  10. [置顶] 我的Android进阶之旅------>Andro