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

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

ContentProvider內容提供者的使用

2019-11-09 18:26:38
字體:
來源:轉載
供稿:網友

ContentPRovider內容提供者

           ContentProvider是安卓四大組件之一,用來共享程序內的數據。當你需要把你的應用程序數據共享給其它的應用程序時,才需要用它,該組件對外提供了其他應用可以直接訪問的增刪查改的方法。并且 ContentProvider暴露了自己的數據,不管應用程序是否啟動,都能訪問到。      以下是我自己運用ContentProvider寫的一個測試其中涉及到了:ContentProvider內容提供者 ;ContentResolver內容訪問者。ContentProvider主要是提供數據資源,ContentResolver可以訪問到ContentProvider的資源,并可以對其增刪查改。兩個運用程序可以直接訪問第一步寫一個提供數據的應用程序,這個程序中也可以開始提供添加數據  activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.g150825_16class.MainActivity">    <EditText    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:hint="Id:"    android:id="@+id/et_main_id"    />    <EditText        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:hint="Name:"        android:id="@+id/et_main_name"        />    <EditText        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:hint="Age:"        android:id="@+id/et_main_age"        />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        >   <Button       android:layout_width="0dp"       android:layout_height="wrap_content"       android:text="保存"       android:layout_weight="1"       android:onClick="save"       />        <Button            android:layout_width="0dp"            android:layout_height="wrap_content"            android:text="查詢"            android:layout_weight="1"            android:onClick="query"            />    </LinearLayout>    <ListView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@android:id/list"    ></ListView></LinearLayout>2.
MainActivity.java
package com.example.g150825_16class;import android.app.ListActivity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AlertDialog;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;import com.example.g150825_16class.com.zking.db.DbHelper;public class MainActivity extends ListActivity {    private EditText et_main_id;    private EditText et_main_name;    private EditText et_main_age;    private SQLiteDatabase db;    private SimpleCursorAdapter simpleCursorAdapter;    private Cursor cursor;    private ListView listview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //實例化DbHelper        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);        //獲取SQLiteDataBase對象(類似Hibernate中session        db = dbHelper.getReadableDatabase();        //獲取ListView        listview = getListView();        initViews();        //查詢所有        cursor = db.query(false,"person",null,null,null,null,null,null,null);        //循環游標        //把值放入list        //設置適配器        //SimpleCursorAdapter      simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.itm_list_view,                cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});        listview.setAdapter(simpleCursorAdapter);        initEvents();//初始化事件    }    private void initEvents() {        //給ListView添加長按事件        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {                //獲取點擊的每一行的值                LinearLayout root= (LinearLayout) view;                String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();                String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();                String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();                //彈出對話框(自定義)                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);                final AlertDialog dialog=builder.create();                //設置點擊空白,不取消對話框                dialog.setCancelable(false);                //解析布局文件                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        Toast.makeText(MainActivity.this, "執行修改操作", Toast.LENGTH_SHORT).show();                        dialog.dismiss();//關閉當前的對話框                    }                });                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        dialog.dismiss();//關閉當前的對話框                    }                });                dialog.setView(v);                dialog.show();                return true;            }        });    }    private void initViews() {        et_main_id = (EditText) findViewById(R.id.et_main_id);        et_main_name = (EditText) findViewById(R.id.et_main_name);        et_main_age = (EditText) findViewById(R.id.et_main_age);    }    public void save(View view){        String name=et_main_name.getText().toString();        int age=Integer.parseInt(et_main_age.getText().toString());        //保存到數據庫        ContentValues values=new ContentValues();//Map        values.put("name",name);        values.put("age",age);        values.putNull("_id");        db.insert("person","name",values);        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();        cursor=queryAllPerson(null);        //通知適配器發生改變        simpleCursorAdapter.changeCursor(cursor);    }    public Cursor queryAllPerson(String name){        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);        Cursor cursor;        if(!"".equals(name)){            Log.i("test","name="+name);            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});        }else{            Log.i("test","查詢所有");            cursor = db.rawQuery("select * from person",null);        }        return cursor;    }    public void query(View view){//        if(!TextUtils.isEmpty(et_main_name.getText())){        String name=et_main_name.getText().toString();        cursor=queryAllPerson(name);        //通知適配器發生改變        simpleCursorAdapter.changeCursor(cursor);    }}
3.MyPersonProvider.Javapublic class MyPersonProvider extends ContentProvider{    private DbHelper dbHelper;    private SQLiteDatabase sqLiteDatabase;    @Override    public boolean onCreate() {        Log.i("test","onCreate");        //初始化DB        dbHelper = new DbHelper(getContext(),"person.db",null,2);        sqLiteDatabase = dbHelper.getReadableDatabase();        return false;    }    @Override    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {        Log.i("test","query");        //查詢數據庫中的所有數據        return sqLiteDatabase.query(false,"person",projection,selection,selectionArgs,null,null,sortOrder,null);    }    @Nullable    @Override    public String getType(Uri uri) {        Log.i("test","getType");        return null;    }    @Nullable    @Override    public Uri insert(Uri uri, ContentValues values) {        Log.i("test","insert");        sqLiteDatabase.insert("person",null,values);        return null;    }    @Nullable    @Override    public int delete(Uri uri, String selection, String[] selectionArgs) {        Log.i("test","delete");        sqLiteDatabase.delete("person",selection,selectionArgs);        return 0;    }    @Nullable    @Override    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {        Log.i("test","update");        sqLiteDatabase.update("person",values,selection,selectionArgs);        return 0;    }}
在清單文件中
<!--配置內容提供者--><provider    android:authorities="com.example.g150825_16class.PERSONS"    android:name=".com.zking.provider.MyPersonProvider"    android:exported="true"    ></provider>以上是contentProvider提供數據資源
那么ContentResolver內容訪問者可以對上一個應用程序進行直接的訪問
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.g150825_24contentresole.MainActivity">  <Button      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:onClick="getData"      android:text="獲取數據"      />  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="Id:"      android:id="@+id/et_main_id"      />  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="Name:"      android:id="@+id/et_main_name"      />  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="Age:"      android:id="@+id/et_main_age"      />  <LinearLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:orientation="horizontal"      >    <Button        android:layout_width="0dp"        android:layout_height="wrap_content"        android:text="保存"        android:layout_weight="1"        android:onClick="save"        /></LinearLayout><!--修改-->  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="修改Id:"      android:id="@+id/et_main_id_update"      />  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="修改Name:"      android:id="@+id/et_main_name_update"      />  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="修改Age:"      android:id="@+id/et_main_age_update"      />  <LinearLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:orientation="horizontal"      >    <Button        android:layout_width="0dp"        android:layout_height="wrap_content"        android:text="修改保存"        android:layout_weight="1"        android:onClick="update"        />  </LinearLayout>  <!--刪除-->  <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:hint="根據name刪除:"      android:id="@+id/et_main_id_delete"      />  <LinearLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:orientation="horizontal"      >    <Button        android:layout_width="0dp"        android:layout_height="wrap_content"        android:text="刪除保存"        android:layout_weight="1"        android:onClick="delete"        />  </LinearLayout></LinearLayout>
MainActivity.java  這個文件中的URL是十分重要的,它是讓兩個程序進行訪問的重要橋梁
package com.example.g150825_24contentresole;import android.content.ContentProvider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private ContentResolver cr;    private ListView listview;    private Cursor cursor;    private EditText et_main_id;    private EditText et_main_name;    private EditText et_main_age;    private Uri uri;    private EditText et_main_id_update;    private EditText et_main_name_update;    private EditText et_main_age_update;    private EditText et_main_id_delete;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //獲取內容訪問者        initViews();        cr = getContentResolver();    }    private void initViews() {        et_main_id = (EditText) findViewById(R.id.et_main_id);        et_main_name = (EditText) findViewById(R.id.et_main_name);        et_main_age = (EditText) findViewById(R.id.et_main_age);       //修改        et_main_id_update = (EditText) findViewById(R.id.et_main_id_update);        et_main_name_update = (EditText) findViewById(R.id.et_main_name_update);        et_main_age_update = (EditText) findViewById(R.id.et_main_age_update);        //刪除        et_main_id_delete = (EditText) findViewById(R.id.et_main_id_delete);    }    //查    public void getData(View view){        //訪問數據        uri = Uri.parse("content://com.example.g150825_16class.PERSONS");        cursor = cr.query(uri,null,null,null,null);//拿取數據        while (cursor.moveToNext()){            int pid= cursor.getInt(cursor.getColumnIndex("_id"));            String name= cursor.getString(cursor.getColumnIndex("name            int age= cursor.getInt(cursor.getColumnIndex("age"));            Log.i("test",pid+"aa"+name+"bb"+age+"cc");        }    }    //增加    public void save(View view){        String name=et_main_name.getText().toString();        int age=Integer.parseInt(et_main_age.getText().toString());        uri = Uri.parse("content://com.example.g150825_16class.PERSONS");        //保存到數據庫中        ContentValues values=new ContentValues();//Map        values.put("name",name);        values.put("age",age);        values.putNull("_id");        cr.insert(uri,values);        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();    }    //修改    public  void update(View view){        Log.i("test","dddd");        String name=et_main_name_update.getText().toString();        int age=Integer.parseInt(et_main_age_update.getText().toString());        int pid=Integer.parseInt(et_main_age_update.getText().toString());        //url        uri = Uri.parse("content://com.example.g150825_16class.PERSONS");        ContentValues values=new ContentValues();//Map        values.put("name",name);        values.put("age",age);        String aa="_id=?";        String[] bb=new String[]{String.valueOf(pid)};        cr.update(uri,values,aa,bb);        Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();    }    //刪除    public void delete(View view){        String name=et_main_id_delete.getText().toString();        uri = Uri.parse("content://com.example.g150825_16class.PERSONS");        cr.delete(uri,"name=?",new String[]{name});        Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();    }
1、ContentProvider內容提供者的應用程序
}
2、ContentResolver內容訪問者

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景洪市| 方城县| 鹤峰县| 京山县| 河北省| 五河县| 泸定县| 惠水县| 吴堡县| 九寨沟县| 岫岩| 怀来县| 喀喇| 德庆县| 昌江| 龙江县| 长沙县| 称多县| 海宁市| 镇坪县| 军事| 会泽县| 漾濞| 米林县| 玉山县| 栖霞市| 大田县| 额尔古纳市| 苍溪县| 浦北县| 岳阳县| 远安县| 承德市| 博爱县| 五大连池市| 界首市| 松阳县| 大连市| 阿拉善左旗| 天全县| 津市市|