android的contentProvider

转载 2015年07月10日 17:12:00

      ContentProvider为Android四大组件之一,主要用来应用程序之间的数据共享,也就是说一个应用程序用ContentProvider将自己的数据暴露出来,其他应用程序通过ContentResolver来对其暴露出来的数据进行增删改查。

      ContenProvider与ContentResolver之间的对话同过Uri(通用资源标识符),一个不恰当的比喻就好像浏览器要显示一个网页要有一个东西发送请求,这相当于ContentResolver,你要拿东西就要知道去哪里拿,你就得知道服务器的域名或网址,而这个网址就相当于Uri,当到达服务器的时候服务器要有个东西来处理,这就相当于ContenProvider。

 

A程序通过ContenProvider来暴露数据的基本步骤:

   1、实现一个ContenProvider的子类,并重写query,insert,update,delete等这几个方法,

    2、在androidmanifest.xml中注册ContenProvider,指定的android:authorities属性

B程序通过ContentResolver来操作A程序暴露出来的数据的基本步骤

   1、通过content的getContentResolver()来获取ContentResolver对象

   2、通过ContentResolver对象来query,insert,update,delete来进行操作

在实现query,insert,update,delete时有一个重要的参数Uri类,Uri一个中要的方法Uri.parse(String str)用来解析str字符串,而str字符串格式一般都有A程序提供给B程序,B程序按照指定的格式去请求 。比如:content//:com.android.xiong.ConentProviderTestA.firstContentProvider/xiong 其格式一般分为三个部分:content//:这部分是固定不变的 而com.android.xiong.ConentProviderTestA.firstContentProvider表A程序在androidmanifest.xml注册的android:authorities属性,xiong则表示资源部分

[html] view plaincopy
  1.        <provider  
  2.            android:name="com.android.xiong.conentprovidertesta.FirstContentProvider"  
  3.            android:authorities="com.android.xiong.ConentProviderTestA.firstContentProvider"  
  4.            android:exported="true" >  
  5. </provider>  

 

 

实例如下

   A程序:

  UserInfo.java

[java] view plaincopy
  1. package com.android.xiong.conentprovidertesta;  
  2.   
  3. import android.content.ContentProvider;  
  4. import android.content.ContentValues;  
  5. import android.content.UriMatcher;  
  6. import android.database.Cursor;  
  7. import android.database.sqlite.SQLiteDatabase;  
  8. import android.net.Uri;  
  9.   
  10. public class FirstContentProvider extends ContentProvider {  
  11.   
  12.     // UriMatcher类主要用来匹配Uri  
  13.     private static final UriMatcher uriMatcher = new UriMatcher(  
  14.             UriMatcher.NO_MATCH);  
  15.     private MySqlite mysqlite;  
  16.     static {  
  17.         // 注册向外部程序提供的Uri  
  18.         uriMatcher.addURI(UserInfo.AUTOR, "userinfo"1);  
  19.         uriMatcher.addURI(UserInfo.AUTOR, "userinfoall"2);  
  20.     }  
  21.     //删除数据  
  22.     @Override  
  23.     public int delete(Uri uri, String selection, String[] selectionArgs) {  
  24.         int number = 0;  
  25.         if (uriMatcher.match(uri) == 1) {  
  26.             // 根据条件删除数据,并获取删除的行数  
  27.             number = mysqlite.getReadableDatabase().delete("user_info",  
  28.                     selection, selectionArgs);  
  29.         }  
  30.         // 通知数据已经改变  
  31.         getContext().getContentResolver().notifyChange(uri, null);  
  32.         return number;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String getType(Uri uri) {  
  37.   
  38.         return null;  
  39.     }  
  40.     //插入数据  
  41.     @Override  
  42.     public Uri insert(Uri uri, ContentValues values) {  
  43.         String name = values.getAsString(UserInfo.User.NAME).toString();  
  44.         String age = values.getAsInteger(UserInfo.User.AGE).toString();  
  45.         String maxId = "select max(id) id from user_info";  
  46.         Cursor cursor = mysqlite.getReadableDatabase().rawQuery(maxId, null);  
  47.         cursor.moveToFirst();  
  48.         int userid = cursor.getInt(0) + 1;  
  49.         if (uriMatcher.match(uri) == 1) {  
  50.   
  51.             mysqlite.getWritableDatabase().execSQL(  
  52.                     "insert into user_info values(?,?,?)",  
  53.                     new String[] { String.valueOf(userid), name, age });  
  54.         }  
  55.         return uri;  
  56.     }  
  57.   
  58.     // 连接数据库  
  59.     @Override  
  60.     public boolean onCreate() {  
  61.         mysqlite = new MySqlite(getContext(), "userinfo.db"null1);  
  62.         return true;  
  63.     }  
  64.     //查询数据  
  65.     @Override  
  66.     public Cursor query(Uri uri, String[] projection, String selection,  
  67.             String[] selectionArgs, String sortOrder) {  
  68.         SQLiteDatabase sqlite = mysqlite.getReadableDatabase();  
  69.         String str = "select name,age from user_info";  
  70.         if (uriMatcher.match(uri) == 1) {  
  71.             str += " where " + selection;  
  72.         }  
  73.         Cursor cursor = sqlite.rawQuery(str, selectionArgs);  
  74.         return cursor;  
  75.     }  
  76.     //修改数据  
  77.     @Override  
  78.     public int update(Uri uri, ContentValues values, String selection,  
  79.             String[] selectionArgs) {  
  80.         SQLiteDatabase sqlite = mysqlite.getReadableDatabase();  
  81.         int number = 0;  
  82.         if (uriMatcher.match(uri) == 1) {  
  83.             number = sqlite.update("user_info", values, selection,  
  84.                     selectionArgs);  
  85.         }  
  86.         return number;  
  87.     }  
  88.   
  89. }  


 

   FirstContentProvider.java

[java] view plaincopy
  1. package com.android.xiong.conentprovidertesta;  
  2.   
  3. import android.content.ContentProvider;  
  4. import android.content.ContentValues;  
  5. import android.content.UriMatcher;  
  6. import android.database.Cursor;  
  7. import android.database.sqlite.SQLiteDatabase;  
  8. import android.net.Uri;  
  9.   
  10. public class FirstContentProvider extends ContentProvider {  
  11.   
  12.     // UriMatcher类主要用来匹配Uri  
  13.     private static final UriMatcher uriMatcher = new UriMatcher(  
  14.             UriMatcher.NO_MATCH);  
  15.     private MySqlite mysqlite;  
  16.     static {  
  17.         // 注册向外部程序提供的Uri  
  18.         uriMatcher.addURI(UserInfo.AUTOR, "userinfo"1);  
  19.         uriMatcher.addURI(UserInfo.AUTOR, "userinfoall"2);  
  20.     }  
  21.     //删除数据  
  22.     @Override  
  23.     public int delete(Uri uri, String selection, String[] selectionArgs) {  
  24.         int number = 0;  
  25.         if (uriMatcher.match(uri) == 1) {  
  26.             // 根据条件删除数据,并获取删除的行数  
  27.             number = mysqlite.getReadableDatabase().delete("user_info",  
  28.                     selection, selectionArgs);  
  29.         }  
  30.         // 通知数据已经改变  
  31.         getContext().getContentResolver().notifyChange(uri, null);  
  32.         return number;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String getType(Uri uri) {  
  37.   
  38.         return null;  
  39.     }  
  40.     //插入数据  
  41.     @Override  
  42.     public Uri insert(Uri uri, ContentValues values) {  
  43.         String name = values.getAsString(UserInfo.User.NAME).toString();  
  44.         String age = values.getAsInteger(UserInfo.User.AGE).toString();  
  45.         String maxId = "select max(id) id from user_info";  
  46.         Cursor cursor = mysqlite.getReadableDatabase().rawQuery(maxId, null);  
  47.         cursor.moveToFirst();  
  48.         int userid = cursor.getInt(0) + 1;  
  49.         if (uriMatcher.match(uri) == 1) {  
  50.   
  51.             mysqlite.getWritableDatabase().execSQL(  
  52.                     "insert into user_info values(?,?,?)",  
  53.                     new String[] { String.valueOf(userid), name, age });  
  54.         }  
  55.         return uri;  
  56.     }  
  57.   
  58.     // 连接数据库  
  59.     @Override  
  60.     public boolean onCreate() {  
  61.         mysqlite = new MySqlite(getContext(), "userinfo.db"null1);  
  62.         return true;  
  63.     }  
  64.     //查询数据  
  65.     @Override  
  66.     public Cursor query(Uri uri, String[] projection, String selection,  
  67.             String[] selectionArgs, String sortOrder) {  
  68.         SQLiteDatabase sqlite = mysqlite.getReadableDatabase();  
  69.         String str = "select name,age from user_info";  
  70.         if (uriMatcher.match(uri) == 1) {  
  71.             str += " where " + selection;  
  72.         }  
  73.         Cursor cursor = sqlite.rawQuery(str, selectionArgs);  
  74.         return cursor;  
  75.     }  
  76.     //修改数据  
  77.     @Override  
  78.     public int update(Uri uri, ContentValues values, String selection,  
  79.             String[] selectionArgs) {  
  80.         SQLiteDatabase sqlite = mysqlite.getReadableDatabase();  
  81.         int number = 0;  
  82.         if (uriMatcher.match(uri) == 1) {  
  83.             number = sqlite.update("user_info", values, selection,  
  84.                     selectionArgs);  
  85.         }  
  86.         return number;  
  87.     }  
  88.   
  89. }  


MySqlite.java

  

[java] view plaincopy
  1. package com.android.xiong.conentprovidertesta;  
  2.   
  3. import android.content.Context;  
  4. import android.database.sqlite.SQLiteDatabase;  
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  6. import android.database.sqlite.SQLiteOpenHelper;  
  7.   
  8. public class MySqlite extends SQLiteOpenHelper {  
  9.   
  10.     static final String sql = "create table user_info(id int,name varchar(30),age int)";  
  11.   
  12.     public MySqlite(Context context, String name, CursorFactory factory,  
  13.             int version) {  
  14.         super(context, name, factory, version);  
  15.         // TODO Auto-generated constructor stub  
  16.     }  
  17.   
  18.     @Override  
  19.     public void onCreate(SQLiteDatabase db) {  
  20.         //创建数据表  
  21.         db.execSQL(sql);  
  22.   
  23.     }  
  24.   
  25.     @Override  
  26.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  27.         // TODO Auto-generated method stub  
  28.   
  29.     }  
  30.   
  31. }  


MainActivity.java

  

[java] view plaincopy
  1. package com.android.xiong.conentprovidertesta;  
  2.   
  3. import android.content.Context;  
  4. import android.database.sqlite.SQLiteDatabase;  
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  6. import android.database.sqlite.SQLiteOpenHelper;  
  7.   
  8. public class MySqlite extends SQLiteOpenHelper {  
  9.   
  10.     static final String sql = "create table user_info(id int,name varchar(30),age int)";  
  11.   
  12.     public MySqlite(Context context, String name, CursorFactory factory,  
  13.             int version) {  
  14.         super(context, name, factory, version);  
  15.         // TODO Auto-generated constructor stub  
  16.     }  
  17.   
  18.     @Override  
  19.     public void onCreate(SQLiteDatabase db) {  
  20.         //创建数据表  
  21.         db.execSQL(sql);  
  22.   
  23.     }  
  24.   
  25.     @Override  
  26.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  27.         // TODO Auto-generated method stub  
  28.   
  29.     }  
  30.   
  31. }  


activity_main.xml

[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     tools:context=".MainActivity" >  
  7.   
  8.     <TextView  
  9.         android:id="@+id/txt1"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:gravity="center_horizontal"  
  13.         android:text="添加信息"  
  14.         android:textSize="20dp" />  
  15.   
  16.     <EditText  
  17.         android:id="@+id/ed1"  
  18.         android:layout_width="match_parent"  
  19.         android:layout_height="wrap_content"  
  20.         android:hint="添加name" />  
  21.   
  22.     <EditText  
  23.         android:id="@+id/ed2"  
  24.         android:layout_width="match_parent"  
  25.         android:layout_height="wrap_content"  
  26.         android:hint="添加age"  
  27.         android:inputType="number" />  
  28.   
  29.     <Button  
  30.         android:id="@+id/bt1"  
  31.         android:layout_width="match_parent"  
  32.         android:layout_height="wrap_content"  
  33.         android:text="提交数据" />  
  34.   
  35.         <ListView  
  36.             android:id="@+id/lists"  
  37.             android:layout_width="match_parent"  
  38.             android:layout_height="wrap_content" >  
  39.         </ListView>  
  40.   
  41.   
  42. </LinearLayout>  

item.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.     <TextView   
  7.         android:id="@+id/item_txt1"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"/>  
  10.         <TextView   
  11.         android:id="@+id/item_txt2"  
  12.         android:layout_width="wrap_content"  
  13.         android:layout_height="wrap_content"/>  
  14.       
  15.   
  16. </LinearLayout>  


B程序

 UserInfo.java

[java] view plaincopy
  1. package com.android.xiong.contentprovidertestb;  
  2.   
  3. //向外部程序提供一个工具类  
  4. public class UserInfo {  
  5.   
  6.     // 获取ContentProvider的“域名”  
  7.     public static final String AUTOR = "com.android.xiong.ConentProviderTestA.firstContentProvider";  
  8.       
  9.     //定义一个静态内部类,提供ContentProvider可操作的列  
  10.     public static final class User  {  
  11.           
  12.         public  static final  String ID="id";  
  13.         public static final String NAME="name";  
  14.         public static final String AGE="age";  
  15.         //定义该content提供服务的一个Uri  
  16.         public static final String uri="content://"+AUTOR+"/userinfo";  
  17.         public static final String uriall="content://"+AUTOR+"/userinfoall";  
  18.           
  19.     }  
  20.   
  21. }  


MainActivity.java

 

[java] view plaincopy
  1. package com.android.xiong.contentprovidertestb;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import android.app.Activity;  
  9. import android.content.ContentValues;  
  10. import android.database.Cursor;  
  11. import android.net.Uri;  
  12. import android.os.Bundle;  
  13. import android.view.Menu;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.EditText;  
  18. import android.widget.ListView;  
  19. import android.widget.ScrollView;  
  20. import android.widget.SimpleAdapter;  
  21. import android.widget.Toast;  
  22.   
  23. public class MainActivity extends Activity {  
  24.   
  25.     private Button bt1, bt2, bt3, bt4;  
  26.     private EditText ed1, ed2;  
  27.     private ListView list1;  
  28.     private ScrollView sc1;  
  29.   
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.activity_main);  
  34.         bt1 = (Button) findViewById(R.id.bt1);  
  35.         bt2 = (Button) findViewById(R.id.bt2);  
  36.         bt3 = (Button) findViewById(R.id.bt3);  
  37.         bt4 = (Button) findViewById(R.id.bt4);  
  38.         ed1 = (EditText) findViewById(R.id.ed1);  
  39.         ed2 = (EditText) findViewById(R.id.ed2);  
  40.         list1 = (ListView) findViewById(R.id.list);  
  41.         // 显示所有数据  
  42.         list1.setAdapter(adapter(0));  
  43.         sc1 = (ScrollView) findViewById(R.id.scr1);  
  44.         // 向添加ContentProviderA应用的数据  
  45.         bt1.setOnClickListener(new OnClickListener() {  
  46.   
  47.             @Override  
  48.             public void onClick(View v) {  
  49.                 String eds1 = ed1.getText().toString();  
  50.                 String eds2 = ed2.getText().toString();  
  51.                 ContentValues content = new ContentValues();  
  52.                 if (!eds1.equals("") && !eds2.equals("")) {  
  53.                     content.put(UserInfo.User.NAME, eds1);  
  54.                     content.put(UserInfo.User.AGE, eds2);  
  55.                     MainActivity.this.getContentResolver().insert(  
  56.                             Uri.parse(UserInfo.User.uri), content);  
  57.                     Toast.makeText(MainActivity.this"数据插入成功",  
  58.                             Toast.LENGTH_LONG).show();  
  59.                     // 刷新ListView界面  
  60.                     list1.setAdapter(adapter(0));  
  61.                 } else {  
  62.                     Toast.makeText(MainActivity.this"name和age不能为空",  
  63.                             Toast.LENGTH_LONG).show();  
  64.                 }  
  65.   
  66.             }  
  67.         });  
  68.         // 根据条件删除ContentProviderA应用的数据  
  69.         bt2.setOnClickListener(new OnClickListener() {  
  70.   
  71.             @Override  
  72.             public void onClick(View v) {  
  73.                 String eds1 = ed1.getText().toString();  
  74.                 String eds2 = ed2.getText().toString();  
  75.                 if (!eds1.equals("") || !eds2.equals("")) {  
  76.                     HashMap<String, String[]> wheres = wheres(eds1, eds2);  
  77.                     String sql = wheres.get("sql")[0];  
  78.                     String[] selectags = wheres.get("selectages");  
  79.                     MainActivity.this.getContentResolver().delete(  
  80.                             Uri.parse(UserInfo.User.uri), sql, selectags);  
  81.   
  82.                 } else {  
  83.                     Toast.makeText(MainActivity.this"请输入删除条件",  
  84.                             Toast.LENGTH_LONG).show();  
  85.                 }  
  86.                 // 刷新ListView界面  
  87.                 list1.setAdapter(adapter(0));  
  88.             }  
  89.         });  
  90.         // 修改数据  
  91.         bt3.setOnClickListener(new OnClickListener() {  
  92.   
  93.             @Override  
  94.             public void onClick(View v) {  
  95.                 String eds1 = ed1.getText().toString();  
  96.                 String eds2 = ed2.getText().toString();  
  97.                 ContentValues values = new ContentValues();  
  98.                 // 根据条件将列修改为xiong,23  
  99.                 values.put(UserInfo.User.NAME, "xiong");  
  100.                 values.put(UserInfo.User.AGE, "23");  
  101.                 if (!eds1.equals("") || !eds2.equals("")) {  
  102.                     HashMap<String, String[]> wheres = wheres(eds1, eds2);  
  103.                     String sql = wheres.get("sql")[0];  
  104.                     String[] selectags = wheres.get("selectages");  
  105.                     int i=MainActivity.this.getContentResolver().update(  
  106.                             Uri.parse(UserInfo.User.uri), values, sql,  
  107.                             selectags);  
  108.   
  109.                 } else {  
  110.                     Toast.makeText(MainActivity.this"请输入删除条件",  
  111.                             Toast.LENGTH_LONG).show();  
  112.                 }  
  113.                 // 刷新ListView界面  
  114.                 list1.setAdapter(adapter(0));  
  115.   
  116.             }  
  117.         });  
  118.         // 根据条件查询ContentProviderA应用的数据  
  119.         bt4.setOnClickListener(new OnClickListener() {  
  120.             @Override  
  121.             public void onClick(View v) {  
  122.                 if (!ed1.getText().toString().equals("")  
  123.                         || !ed2.getText().toString().equals(""))  
  124.                     list1.setAdapter(adapter(1));  
  125.                 else  
  126.                     list1.setAdapter(adapter(0));  
  127.             }  
  128.         });  
  129.     }  
  130.   
  131.     // 用来判别条件  
  132.     public HashMap<String, String[]> wheres(String eds1, String eds2) {  
  133.         HashMap<String, String[]> where = new HashMap<String, String[]>();  
  134.         if (!eds1.equals("") && !eds2.equals("")) {  
  135.             String[] sql = { UserInfo.User.NAME + "=? and " + UserInfo.User.AGE  
  136.                     + " =?" };  
  137.             String[] selectages = { eds1, eds2 };  
  138.             where.put("sql", sql);  
  139.             where.put("selectages", selectages);  
  140.   
  141.         }  
  142.         if (!eds1.equals("") && eds2.equals("")) {  
  143.             String[] sql = { UserInfo.User.NAME + "=? " };  
  144.             String[] selectages = { eds1 };  
  145.             where.put("sql", sql);  
  146.             where.put("selectages", selectages);  
  147.   
  148.         }  
  149.         if (eds1.equals("") && !eds2.equals("")) {  
  150.             String[] sql = { UserInfo.User.AGE + " =?" };  
  151.             String[] selectages = { eds2 };  
  152.             where.put("sql", sql);  
  153.             where.put("selectages", selectages);  
  154.   
  155.         }  
  156.         return where;  
  157.     }  
  158.   
  159.     // 用来显示数据  
  160.     public SimpleAdapter adapter(int i) {  
  161.         Cursor cs = MainActivity.this.getContentResolver().query(  
  162.                 Uri.parse(UserInfo.User.uriall), nullnullnullnull);  
  163.         String eds1 = ed1.getText().toString();  
  164.         String eds2 = ed2.getText().toString();  
  165.         if (i == 1) {  
  166.             if (!eds1.equals("") || !eds2.equals("")) {  
  167.                 HashMap<String, String[]> wheres = wheres(eds1, eds2);  
  168.                 String sql = wheres.get("sql")[0];  
  169.                 String[] selectags = wheres.get("selectages");  
  170.                 cs = MainActivity.this.getContentResolver().query(  
  171.                         Uri.parse(UserInfo.User.uri), null, sql, selectags,  
  172.                         null);  
  173.             }  
  174.   
  175.         }  
  176.   
  177.         List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();  
  178.         while (cs.moveToNext()) {  
  179.             Map<String, Object> map = new HashMap<String, Object>();  
  180.             map.put("name", cs.getString(0));  
  181.             map.put("age", cs.getString(1));  
  182.             lists.add(map);  
  183.         }  
  184.         SimpleAdapter simepl = new SimpleAdapter(MainActivity.this, lists,  
  185.                 R.layout.item, new String[] { "name""age" }, new int[] {  
  186.                         R.id.item_txt1, R.id.item_txt2 });  
  187.         return simepl;  
  188.     }  
  189.   
  190.     @Override  
  191.     public boolean onCreateOptionsMenu(Menu menu) {  
  192.         // Inflate the menu; this adds items to the action bar if it is present.  
  193.         getMenuInflater().inflate(R.menu.main, menu);  
  194.         return true;  
  195.     }  
  196.   
  197. }  

activity.xml

[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     tools:context=".MainActivity" >  
  7.   
  8.     <ScrollView  
  9.         android:id="@+id/scr1"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="wrap_content" >  
  12.   
  13.         <LinearLayout  
  14.             android:layout_width="match_parent"  
  15.             android:layout_height="wrap_content"  
  16.             android:orientation="vertical" >  
  17.   
  18.             <Button  
  19.                 android:id="@+id/bt1"  
  20.                 android:layout_width="match_parent"  
  21.                 android:layout_height="wrap_content"  
  22.                 android:text="添加" />  
  23.   
  24.             <Button  
  25.                 android:id="@+id/bt2"  
  26.                 android:layout_width="match_parent"  
  27.                 android:layout_height="wrap_content"  
  28.                 android:text="删除" />  
  29.   
  30.             <Button  
  31.                 android:id="@+id/bt3"  
  32.                 android:layout_width="match_parent"  
  33.                 android:layout_height="wrap_content"  
  34.                 android:text="更改" />  
  35.   
  36.             <Button  
  37.                 android:id="@+id/bt4"  
  38.                 android:layout_width="match_parent"  
  39.                 android:layout_height="wrap_content"  
  40.                 android:text="查询" />  
  41.   
  42.             <EditText  
  43.                 android:id="@+id/ed1"  
  44.                 android:layout_width="match_parent"  
  45.                 android:layout_height="wrap_content"  
  46.                 android:hint="输入name条件进行增删改查" />  
  47.   
  48.             <EditText  
  49.                 android:id="@+id/ed2"  
  50.                 android:layout_width="match_parent"  
  51.                 android:layout_height="wrap_content"  
  52.                 android:hint="输age条件进行增删改查" />  
  53.         </LinearLayout>  
  54.     </ScrollView>  
  55.   
  56.     <ListView  
  57.         android:id="@+id/list"  
  58.         android:layout_width="match_parent"  
  59.         android:layout_height="wrap_content" >  
  60.     </ListView>  
  61.   
  62. </LinearLayout>  

item.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.     <TextView   
  7.         android:id="@+id/item_txt1"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"/>  
  10.         <TextView   
  11.         android:id="@+id/item_txt2"  
  12.         android:layout_width="wrap_content"  
  13.         android:layout_height="wrap_content"/>  
  14.       
  15.   
  16. </LinearLayout>

相关文章推荐

Android ContentProvider

  • 2014年12月19日 11:38
  • 9.31MB
  • 下载

Android ContentProvider全面解析

  • 2016年11月18日 11:24
  • 33.63MB
  • 下载

Android开发之内容提供者——创建自己的ContentProvider(详解)

苦心人天不负卧薪尝胆三千越甲可吞吴,有志者天不负釜底抽薪百二秦川终属楚。...
  • dmk877
  • dmk877
  • 2015年12月29日 09:18
  • 10124

android 数据共享(ContentProvider)

  • 2016年10月04日 16:44
  • 7.79MB
  • 下载

Android四大组件ContentProvider

  • 2016年08月31日 20:37
  • 10.06MB
  • 下载

Android 内容提供器---创建内容提供器(实现ContentProvider类)

ContentProvider对象实例通过处理来之其他应用程序的请求来管理对结构化数据集的访问。最终调用ContentResolver对象的所有的访问形式,都会对应ContentProvider类的具...

android开发contentprovider

  • 2013年08月10日 20:49
  • 1.17MB
  • 下载

android 用ContentProvider操作文件

  • 2012年12月20日 17:36
  • 48KB
  • 下载

Android四大组件之ContentProvider(二)读取设备上的图片、音频和视频

Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,通过Content Provider的方式提供给用户。当设备开机或者有SD卡插拔等事件发生时,...

Android学习之自定义ContentProvider类

  • 2014年10月25日 18:00
  • 1.41MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android的contentProvider
举报原因:
原因补充:

(最多只允许输入30个字)