国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ContentProvider(內容提供者)和ContentResolve(內容訪問者)

2019-11-08 19:44:46
字體:
來源:轉載
供稿:網友

   ContentPRovder(內容提供者是安卓四大組件之一):為存儲和獲取數據提供統一的接口。可以在不同的應用程序之間共享數據。Android已經為常見的一些數據提供了默認的ContentProvider 1、ContentProvider使用表的形式來組織數據 無論數據的來源是什么,ContentProvider都會認為是一種表,然后把數據組織成表格 2、ContentProvider提供的方法    query:查詢    insert:插入    update:更新    delete:刪除    getType:得到數據類型    onCreate:創建數據時調用的回調函數 3、每個ContentProvider都有一個公共的URI,這個URI用于表示這個ContentProvider所提供的數據。Android所提供的ContentProvider都存放在android.provider包當中


下面說下我寫的 1.首先是ContentProvider(內容提供者)的主界面:

外面是用的LinearLayout布局

<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_id" android:hint="ID:" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_name" android:hint="Name:" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_age" android:hint="age:" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="保存" android:onClick="save" />

2.寫一個DbHelper(繼承SQLiteOpenHelper)連接數據庫并重新建一個表 重寫3個方法:

public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); Log.i("test","構造"); } @Override //創建數據時調用的回調函數 public void onCreate(SQLiteDatabase sqLiteDatabase) { //操作:創建表的操作 Log.i("test","創建表"); sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.i("test","數據庫版本,低--->高"); }

3.寫了一個類繼承ContentProvider 寫出ContentProvider提供的6個方法 因為我只寫了一個查詢數據:

private static final int PERSONS=1; private static final int PERSON=2; @Override public boolean onCreate() { DbHelper dbHelper=new DbHelper(getContext(),"G150831.db",null,2); sqLiteDatabase = dbHelper.getReadableDatabase(); //實例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加匹配規則 // content://com.zking.g150831_android16_sqlite.data/datas代表查詢所有 // content://com.zking.g150831_android16_sqlite.data/datas/1代表查詢單個uriMatcher.addURI("com.zking.g150831_android16_sqlite.person","persons",MyProvider.PERSONS); uriMatcher.addURI("com.zking.g150831_android16_sqlite.person","persons/#",MyProvider.PERSON); Log.i("text","onCreate"); return false; } @Nullable @Override //查詢 public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { //查詢所有的數據 Log.i("text","query"); int code=uriMatcher.match(uri); switch (code) { case MyProvider.PERSONS: Log.i("text","query查詢所有"); return sqLiteDatabase.query(true,"person",strings,s,strings1,null,null,s1,null); case MyProvider.PERSON: Log.i("text","query查詢單個"); //獲取#好的值 long id= ContentUris.parseId(uri); return sqLiteDatabase.rawQuery("select * from person where _id=?",new String[]{id+""}); } return null;那幾個方法我就不寫上去了

4.在androidMainfest.xml 清單文件中去配置這個MyProvider

<provider android:authorities="com.zking.g150831_android16_sqlite.person" android:name="com.zking.provider.MyProvider" android:exported="true" ></provider>

5.在MainActivity這個類中寫了一個方法:

public void save(View view){ String name=et_main_name.getText().toString(); String age=et_main_age.getText().toString(); //存到數據庫// ContentValues values=new ContentValues();//Map// values.put("name",name);// values.put("age",age);// values.putNull("_id");// database.insert("person","name",values); //HQL QBC 純(原) for (int i = 0; i <20 ; i++) { //根據你寫入的數據循環20次 database.execSQL("insert into person values(null,?,?)",new String[]{name+i,age}); } Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show(); }

ContentResolve(內容訪問者)

1.主界面:

<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="獲取數據" android:onClick="getdata" />

2.MainActivity寫了個判斷EditText有沒有數據在查詢:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取內容訪問者 cr = getContentResolver(); et_main = (EditText) findViewById(R.id.et_main); } public void getdata(View view){ if (TextUtils.isEmpty(et_main.getText())){ //如果查詢為空就查所有 uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons"); } else { //否則查詢單個 String id=et_main.getText().toString(); uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons/"+id); } // Cursor cursor= cr.query(uri,null,null,null,null); //單個查詢 //01.條件查詢_id=3 //02.網頁查詢?id=4 //03.URI匹配器 //SimpleCursorAdaper while (cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("text","_"+id+"_"+name+"_"+age); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 孟州市| 临汾市| 灌南县| 视频| 开封市| 百色市| 芜湖市| 丽江市| 许昌市| 亳州市| 田阳县| 东至县| 宣化县| 和林格尔县| 麟游县| 黎平县| 荆门市| 呼玛县| 虎林市| 通海县| 尚志市| 彝良县| 台南县| 甘泉县| 芷江| 荃湾区| 拜泉县| 都安| 德阳市| 玉溪市| 莒南县| 南康市| 安溪县| 邳州市| 喀喇沁旗| 余干县| 高邮市| 深圳市| 观塘区| 张家川| 礼泉县|