Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中ContentProvider+ContentResolver示例

android中ContentProvider+ContentResolver示例

編輯:關於Android編程

ContentProvider(內容提供者)android四大基本組件之一。主要是跨應用共享數據的方式之一,ContentProvider分為自定義和系統定義,如聯系人就是系統定義。

ContentProvider(內容提供者)主要方法:

public boolean onCreate()該方法在ContentProvider創建時調用 public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1)查詢指定的ContentProvider返回一個Cursor結果。 public Uri insert(Uri uri, ContentValues contentValues)向指定的ContentProvider添加數據。 public int delete(Uri uri, String s, String[] strings)向指定ContentProvider進行刪除操作。 public int update(Uri uri, ContentValues contentValues, String s, String[] strings)對指定ContentProvider進行修改操作。 public String getType(Uri uri)返回指定ContentProvider數據類型。

ContentResolver(內容訪問者):
當外部應用需要使用ContentProvider時,需要通過ContentResolver來對ContentProvider進行增、刪、該、查,而ContentResolver可以通過getContentResolver()方法來獲取。

在訪問者應用中還需要定義Uri,Uri的定義必須規范如:
“content://com.example.myandrioid_24.PERSON” 其中content://與http://類似

下面是ContentProvider+ContentResolver+ListView實現的簡單示例:

ContentProvider(內容提供者):

    private SQLiteDatabase db;

    @Override
    public boolean onCreate() {
        DBHelper dbHelper=new DBHelper(getContext(),"person.db",null,2);
        db = dbHelper.getReadableDatabase();
        return false;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        return db.query(false,"person",strings,s,strings1,null,null,null,null);
    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        db.insert("person",null,contentValues);
        return uri;
    }

    @Override
    public int delete(Uri uri, String s, String[] strings) {
        return  db.delete("person",s,strings);
    }

    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {

        return db.update("person",contentValues,s,strings);
    }

提供者應用清單文件:




        

ContentResolver(內容訪問者):

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private ContentResolver cr;
    private Uri uri;
    private ListView lv_main_list;
    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取控件
        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);
        lv_main_list = (ListView) findViewById(R.id.lv_main_list);
        //獲取內容提供者
        cr = getContentResolver();
        //獲取內容提供者地址
        uri = Uri.parse("content://com.example.myandrioid_24.PERSON");
        //通過內容提供者獲取Cursor
        cursor = cr.query(uri,null,null,null,null);
        //設置listView適配器
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_list_view, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_id,R.id.tv_item_name,R.id.tv_item_age});
        lv_main_list.setAdapter(simpleCursorAdapter);

        //listView點擊事件
        lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                //獲取當前點擊的值
                LinearLayout linearLayout= (LinearLayout) view;
                final String id=((TextView)linearLayout.findViewById(R.id.tv_item_id)).getText().toString();
                final String name=((TextView)linearLayout.findViewById(R.id.tv_item_name)).getText().toString();
                final String age=((TextView)linearLayout.findViewById(R.id.tv_item_age)).getText().toString();


                //彈出對話框(自定義)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //設置點擊空白,不取消對話框
                dialog.setCancelable(false);

                //解析布局文件
                final View v=getLayoutInflater().inflate(R.layout.my_dialog,null);
                ((TextView)v.findViewById(R.id.tv_my_dialog_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_my_dialog_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_my_dialog_age)).setText(age);

                //確定修改
                ((Button)v.findViewById(R.id.btn_my_dialog_ok)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //獲取修改的值
                        final String names=((EditText)v.findViewById(R.id.et_my_dialog_name)).getText().toString();
                        final String ages=((EditText)v.findViewById(R.id.et_my_dialog_age)).getText().toString();
                        //
                        ContentValues contentValues=new ContentValues();//Map
                        contentValues.put("name",names);
                        contentValues.put("age",ages);
                        cr.update(uri,contentValues,"_id=?",new String[]{id});
                        //添加後更新數據
                        cursor=cr.query(uri,null,null,null,null);
                        //通知適配器發生改變
                        simpleCursorAdapter.changeCursor(cursor);
                        //關閉彈出框
                        dialog.dismiss();
                    }
                });
                //取消修改
                ((Button)v.findViewById(R.id.btn_my_dialog_no)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();
                    }
                });
                dialog.setView(v);
                dialog.show();
            }
        });


    }

    //添加的方法
    public void getInsert(View view){

        if (TextUtils.isEmpty(et_main_name.getText().toString())&&TextUtils.isEmpty(et_main_age.getText().toString())) {
            //獲取添加的值
            String name=et_main_name.getText().toString();
            int age=Integer.parseInt(et_main_age.getText().toString());
            //添加的值
            ContentValues values=new ContentValues();
            values.put("name",name);
            values.put("age",age);
            //主鍵自動增長,所以不能手動賦值
            values.putNull("_id");
            //調添加的方法
            cr.insert(uri,values);

            //添加後更新數據
            cursor=cr.query(uri,null,null,null,null);
            //通知適配器發生改變
            simpleCursorAdapter.changeCursor(cursor);
        }else {
            Toast.makeText(this, "名字、年齡不能為空", Toast.LENGTH_SHORT).show();
        }




    }

    //刪除的方法
    public void getDelete(View view){
        int id=Integer.parseInt(et_main_id.getText().toString());
        //判斷id是否為空
        if (TextUtils.isEmpty(et_main_id.getText().toString())) {
            cr.delete(uri,"_id=?",new String[]{id+""});
            //刪除後更新數據
            cursor=cr.query(uri,null,null,null,null);
            //通知適配器發生改變
            simpleCursorAdapter.changeCursor(cursor);
        }else{
            Toast.makeText(this, "ID不能為空", Toast.LENGTH_SHORT).show();
        }
    }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved