在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Android內(nèi)容提供者
Android 應(yīng)用組件
使用布局文件自定義Android組件
Android通知
Android主題示例
Android JetPlayer實(shí)例
Android MediaPlayer(多媒體播放)
Android AbsoluteLayout
Android FrameLayout
Android Gestures/手勢(shì)
Android AutoCompleteTextView(自動(dòng)完成)實(shí)例
Android 資源組織和訪(fǎng)問(wèn)
Android ListView
Android GridView
Android數(shù)據(jù)備份
Android撥打電話(huà)
Android發(fā)送短信/SMS
Android ProgressDialog
SimpleCursorAdapter
Android發(fā)送電子郵件
Android Activity
Android TextView
Android事件處理
Android TableLayout
Android加載Spinner
Android內(nèi)容提供者
Android自定義字體
Android Service
Android CheckBox
Android Intent過(guò)濾器
Android LinearLayout
Android登錄實(shí)例
Android RadioButton
Android樣式和主題
Android自定義組件及屬性
Android UI控件
Android Animation(動(dòng)畫(huà))實(shí)例
Android Camera(攝像頭)
Android ToggleButton
Android Clipboard(復(fù)制/剪貼板)
Android音頻捕獲(錄音)
發(fā)布Android應(yīng)用
Android Alertdialog(警告對(duì)話(huà)框)
Android圖片效果
Android內(nèi)部存儲(chǔ)
Android基于位置服務(wù)
Android RadioGroup
Android AutoCompleteTextView
Android Bluetooth(藍(lán)牙)實(shí)例
Android RelativeLayout
Android最佳實(shí)踐
Android本地化
Android自定義組件
Android教程
Android 架構(gòu)
Android UI布局
Android Button
Android Hello World示例
Android音頻管理器實(shí)例
ArrayAdapter
Android拖放
Android碎片/片段
Android圖片切換
Android JSON解析器
Android開(kāi)發(fā)環(huán)境搭建
Android Spinner
Android樣式示例
使用活動(dòng)代碼自定義Android組件
Android ImageButton
Android EditText
Android廣播接收器

Android內(nèi)容提供者

內(nèi)容提供程序(Provider)組件從一個(gè)應(yīng)用到其他請(qǐng)求提供數(shù)據(jù)。通過(guò) ContentResolver 類(lèi)的方法這樣的請(qǐng)求處理。內(nèi)容提供程序使用不同的方式來(lái)存儲(chǔ)數(shù)據(jù),并且可以將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,文件中,甚至在網(wǎng)絡(luò)上。

每一個(gè) Android 應(yīng)用程序運(yùn)行在自己的進(jìn)程保持一個(gè)應(yīng)用程序數(shù)據(jù),在另外一個(gè)應(yīng)用程序中隱藏自己的權(quán)限。但有時(shí)需要在應(yīng)用程序之間共享數(shù)據(jù)。這時(shí)內(nèi)容提供程序是非常有用。

內(nèi)容提供程序?qū)?nèi)容集中在一個(gè)地方,讓許多不同的應(yīng)用訪(fǎng)問(wèn)。內(nèi)容提供程序的行非常像數(shù)據(jù)庫(kù),可以對(duì)它進(jìn)行查詢(xún),編輯等操作,添加或刪除可使用 insert(), update(), delete(), query() 方法。在大多數(shù)情況下,這些數(shù)據(jù)都存儲(chǔ)在SQlite數(shù)據(jù)庫(kù)。

內(nèi)容提供程序?qū)嵤?ContentProvider 類(lèi)的子類(lèi),必須實(shí)現(xiàn)了一套標(biāo)準(zhǔn)的 API,使其他應(yīng)用程序來(lái)執(zhí)行事務(wù)。

public class MyContentProvider extends  ContentProvider {

}

內(nèi)容的URI

要查詢(xún)內(nèi)容提供程序,可以指定 URI 形式如以下格式的查詢(xún)字符串:

<prefix>://<authority>/<data_type>/<id>

這里是URI的各個(gè)部分的細(xì)節(jié)

部分 描述
prefix 始終設(shè)置內(nèi)容為 ://
authority 規(guī)定內(nèi)容提供商的名稱(chēng),例如聯(lián)系人,瀏覽器等。對(duì)于第三方內(nèi)容提供商,這可能是完全合格的名稱(chēng),如 com.yiibai.statusprovider
data_type 表示數(shù)據(jù),特定提供程序提供的類(lèi)型。例如,如果得到所有的聯(lián)系人的通訊錄內(nèi)容提供程序,那么數(shù)據(jù)路徑URI是這樣的 content://contacts/people
id 規(guī)定要求的特定記錄。例如,如果正在尋找聯(lián)系人編號(hào)為5,在聯(lián)系人內(nèi)容提供者中,則URI是這樣的 content://contacts/people/5.

創(chuàng)建內(nèi)容提供者

以下是簡(jiǎn)單的步驟用來(lái)創(chuàng)建自己的內(nèi)容提供者的數(shù)量。

  • 首先,需要?jiǎng)?chuàng)建一個(gè)內(nèi)容提供者擴(kuò)展 ContentProvider 基類(lèi)。

  • 其次,需要定義內(nèi)容提供者用于訪(fǎng)問(wèn)內(nèi)容的 URI 地址。

  • 接下來(lái),需要?jiǎng)?chuàng)建自己的數(shù)據(jù)庫(kù)用于保存內(nèi)容。通常情況下,Android使用SQLite數(shù)據(jù)庫(kù),并且框架需要重寫(xiě) onCreate() 方法會(huì)使用 SQLite開(kāi)放的 Helper方法來(lái)創(chuàng)建或打開(kāi)提供者數(shù)據(jù)庫(kù)。當(dāng)啟動(dòng)應(yīng)用程序時(shí),每個(gè)內(nèi)容提供者的onCreate()方法調(diào)用處理程序在主應(yīng)用程序。

  • 接下來(lái),必須實(shí)現(xiàn)內(nèi)容提供者查詢(xún)來(lái)執(zhí)行不同的數(shù)據(jù)庫(kù)的具體操作。

  • 最后,在activity文件使用<provider>標(biāo)簽注冊(cè)內(nèi)容提供者。

下面是需要覆蓋內(nèi)容提供程序類(lèi)的方法的列表:

  • onCreate() 方法被稱(chēng)為提供者開(kāi)始。

  • query() 方法接收來(lái)自客戶(hù)端的請(qǐng)求。返回的結(jié)果作為一個(gè)Cursor對(duì)象。

  • insert() 方法插入一條新記錄到內(nèi)容提供者。

  • delete() 方法從內(nèi)容提供者刪除記錄。

  • update() 方法從內(nèi)容提供者更新現(xiàn)有記錄。

  • getType() 此方法在給定的URI返回 MIME 類(lèi)型的數(shù)據(jù)。

示例

這個(gè)例子將解釋如何創(chuàng)建自己的 ContentProvider。因此按照下面的步驟類(lèi)似于我們之前創(chuàng)建Hello World范例

Step 描述
1 使用Eclipse IDE創(chuàng)建Android應(yīng)用程序,并將它命名為MyContentProviderunder在包c(diǎn)om.example.mycontentprovider下并使用空的Activity。
2 修改主要活動(dòng)文件MainActivity.java增加兩個(gè)新的方法onClickAddName() 和 onClickRetrieveStudents()。
3 創(chuàng)建一個(gè)新的名為StudentsProvider.java的java文件在packagecom.example.mycontentprovider包下,并定義實(shí)際提供者和相關(guān)方法。
4 使用注冊(cè)內(nèi)容提供者在AndroidManifest.xml文件中的<provider.../>標(biāo)簽
5 修改res/layout/activity_main.xml文件的默認(rèn)內(nèi)容包括一個(gè)小的GUI添加學(xué)生記錄。
6 在res/values/strings.xml文件中定義所需的常量
7 運(yùn)行該應(yīng)用程序啟動(dòng)Android模擬器和驗(yàn)證應(yīng)用程序所做的修改結(jié)果。

以下是主活動(dòng)文件 src/com.example.mycontentprovider/MainActivity.java 修改后的內(nèi)容。這個(gè)文件可以包括每個(gè)生命周期方法。我們已經(jīng)增加了兩個(gè)新方法onClickAddName() onClickRetrieveStudents() 來(lái)處理用戶(hù)與應(yīng)用程序交互。

package com.example.mycontentprovider;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.content.CursorLoader;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }

   public void onClickAddName(View view) {
      // Add a new student record
      ContentValues values = new ContentValues();

      values.put(StudentsProvider.NAME, 
      ((EditText)findViewById(R.id.txtName)).getText().toString());
      
      values.put(StudentsProvider.GRADE, 
      ((EditText)findViewById(R.id.txtGrade)).getText().toString());

      Uri uri = getContentResolver().insert(
      StudentsProvider.CONTENT_URI, values);
      
      Toast.makeText(getBaseContext(), 
      uri.toString(), Toast.LENGTH_LONG).show();
   }

   public void onClickRetrieveStudents(View view) {
      // Retrieve student records
      String URL = "content://com.example.provider.College/students";
      Uri students = Uri.parse(URL);
      Cursor c