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
- Android4大组件之ContentProvider跨项目访问数据Demo
- Android4大组件之ContentProvider获取联系人信息
- Android四组件之ContentProvider架构&Demo
- 四大组件之ContentProvider(三)-ContentProvider的数据存储
- Android四大组件之ContentProvider----数据共享
- Android4大组件详解
- android知识回顾-----4大组件之contentprovider
- Android--ContentProvider跨程序访问数据
- Android--ContentProvider跨程序访问数据
- ContentProvider 彩信数据访问
- Android组件之ContentProvider
- 四组件之ContentProvider
- 四大组件之ContentProvider
- Android之ContentProvider组件
- android组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- Eclipse中安装STS插件
- 258. Add Digits
- windows下安装TensorFlow
- Theano 中文文档 0.9 - 7.1.1 Python教程
- bzoj 2325: [ZJOI2011]道馆之战 (树链剖分+线段树)
- Android4大组件之ContentProvider跨项目访问数据Demo
- 【Android开发艺术探索读书笔记】 第一章 Activity的生命周期与启动模式
- wwwscan网站目录文件批量扫描工具
- angular2 父子组件的通信
- Theano 中文文档 0.9 - 7.1.2 NumPy新手
- Mac下常用工具
- 在Linux CentOS 6.6上安装Python 2.7.9
- 为什么说面向对象编程和函数式编程都有问题
- Spring AOP总结