Android4大组件之ContentProvider跨项目访问数据Demo

来源:互联网 发布:淘宝电商怎么做 编辑:程序博客网 时间:2024/05/21 14:59

1.ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。

内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。

1.创建数据库及增删改查的方法

package com.zking.g150820_andorid16_sqlite;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.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Xml;import android.view.LayoutInflater;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.zking.util.DbUtil;public class MainActivity extends ListActivity {    private EditText et_main_id;    private EditText et_main_name;    private EditText et_main_age;    private SQLiteDatabase sqLiteDatabase;    private ListView listView;    private Cursor cursor;    private SimpleCursorAdapter simpleCursorAdapter;    @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);        listView = getListView();        //创建数据库        DbUtil dbUtil = new DbUtil(this, "G150820.db", null, 2);        sqLiteDatabase = dbUtil.getReadableDatabase();        //查询所有的数据        //Cursor  游标        queryAll();        //循环游标        //实例化适配器BaseAdapter        //把游标中的数据 全部给了List        //设置适配器        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_list, 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);        //给ListView设置长按事件        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            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 alertDialog=builder.create();                //点击空白处,不取消对话框                alertDialog.setCancelable(false);//               View v= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_list,null);                View v = View.inflate(MainActivity.this, R.layout.dialog_list, null);                TextView tv_dialog_list_id = (TextView) v.findViewById(R.id.tv_dialog_list_id);                EditText et_dialog_list_name = (EditText) v.findViewById(R.id.et_dialog_list_name);                EditText et_dialog_list_age = (EditText) v.findViewById(R.id.et_dialog_list_age);                ((Button)v.findViewById(R.id.btn_dialog_list_ok)).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        Toast.makeText(MainActivity.this, "执行修改语句", Toast.LENGTH_SHORT).show();                        //关闭当前对话框                        alertDialog.dismiss();                    }                });                ((Button)v.findViewById(R.id.btn_dialog_list_nook)).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        //关闭当前对话框                        alertDialog.dismiss();                    }                });                tv_dialog_list_id.setText("修改:"+id);                et_dialog_list_name.setText(name);                et_dialog_list_age.setText(age);                alertDialog.setView(v);                alertDialog.show();                return true;            }        });    }    public void save(View view) {        String name = et_main_name.getText().toString();        String age = et_main_age.getText().toString();        //保存到数据库        ContentValues values = new ContentValues();        values.put("name", name);        values.put("age", age);        values.putNull("_id");        sqLiteDatabase.insert("student", "name", values);        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();        queryAll();        //通知适配器发生改变        simpleCursorAdapter.changeCursor(cursor);    }    public void query(View view) {        if (TextUtils.isEmpty(et_main_name.getText())) {            queryAll();        } else {            queryAll(et_main_name.getText().toString());        }        simpleCursorAdapter.changeCursor(cursor);    }    public void queryAll(String... str) {        String name = null;        int length = str.length;        if (length == 0) {            Toast.makeText(MainActivity.this, "查询所有", Toast.LENGTH_SHORT).show();            //?,?            //下标  pageSize            //pageNum            //下标=(pageNum-1)*pageSize            cursor = sqLiteDatabase.rawQuery("select * from student limit ?,?", new String[]{2 + "", 2 + ""});        } else {            name = str[0];            Toast.makeText(MainActivity.this, "模糊查询:" + name, Toast.LENGTH_SHORT).show();            cursor = sqLiteDatabase.rawQuery("select * from student where name like ?", new String[]{"%" + name + "%"});        }    }}

2.添加数据

这里写图片描述

3.通过另外一个项目访问这个项目的数据

package com.zking.g150820_android24_contentresolver;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity {    private ContentResolver cr;    private EditText et_main_id;    private Uri uri;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取内容访问者        cr = getContentResolver();        et_main_id = (EditText) findViewById(R.id.et_main_id);    }    public void getData(View view){        //判断输入框的值是否为空        if(TextUtils.isEmpty(et_main_id.getText().toString())){            //查询所有            //http://www.baidu.com  http://            //ftp:            //tel:            //content://            uri = Uri.parse("content://com.zking.g150820_andorid16_sqlite.PERSON/student");        }else{            //查询单个            //01.直接query传参            //02.类似web  http://localhost:8080/webProject/xxx.action?id=3            //03.Uri匹配器            String id=et_main_id.getText().toString();            uri = Uri.parse("content://com.zking.g150820_andorid16_sqlite.PERSON/student/"+id);        }        Cursor cursor=cr.query(uri,null,null,null,null);        //SimleCursorAdapter        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("test",id+" "+name+" "+age);        }    }}

4.运行后的结果

这里写图片描述

5.最后不要忘了在Manifests配置哟
这里写图片描述

0 0
原创粉丝点击