package com.user.android2_lesson05_contentprovider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
// 内容提供者是Android系统中专门为应用程序之间的数据通讯开发的
// 正常来说应用程序之间是不允许数据通信的,
// 但是内容提供者的作用就是让别的应用程序访问我们的数据库
// 想要学习内容提供者需要两个应用程序,一个作为内容提供者,一个作为内容访问者
// 1.创建一个数据库帮助类,用于数据的存储和访问,
// 2.自定义一个内容提供者---创建一个类继承自contentProvider
// 3.在清单文件中进行注册,表明本APP开启了一个内容提供者
// 甲方:1.创建数据库 2.创建一个内容提供者,并实现对应的增删改查方法
// 乙方:1.创建一个内容接收者 2.通过内容接收者,调用指定的APP的增删改查方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
创建一个Helper
package com.user.android2_lesson05_contentprovider;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by user on 2016/7/8.
*/
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 在这里进行创建表的操作
String sql = "CREATE TABLE student(sid int,name text,sex text ,age int );";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
创建一个StudentPrivider继承ContentPrivider
package com.user.android2_lesson05_contentprovider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
/**
* Created by user on 2016/7/8.
*/
// 这里是对其它APP如何访问本APP的数据处理
public class StudentPrivider extends ContentProvider {
// 1.声明两个属性 用来存储操作的对象
private DBHelper helper;
private SQLiteDatabase db;
@Override
public boolean onCreate() {
helper = new DBHelper(getContext(),"student.db",null,1);
db = helper.getReadableDatabase();
return true;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
// 如果别的应用调用了添加数据的数据提供者接口,会调用这个方法
// 这里是对调用请求的处理
// 这里讲调用者提供的数据插入到student表中
db.insert("student",null,contentValues);
return uri;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
return 0;
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
return 0;
}
}
这里注意Manifest的修改
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.user.android2_lesson05_contentprovider">
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:authorities = "com.user.student"
android:name = ".StudentPrivider"
android:exported = "true"
/>
</application>
</manifest>
到这里内容提供者写完。
内容请求者
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.user.android2_lesson_05_testprovider.MainActivity">
<Button
android:id="@+id/insertbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入数据"/>
</RelativeLayout>
package com.user.android2_lesson_05_testprovider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button insertbutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
insertbutton = (Button) findViewById(R.id.insertbutton);
insertbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentResolver resolver = getContentResolver();
// 创建我们需要插入的数据
ContentValues values = new ContentValues();
values.put("sid",1);
values.put("name","孙连莹");
values.put("sex","女");
values.put("age",555);
// 使用内容处理者进行数据的插入
resolver.insert(Uri.parse("content://com.user.student"),values);
Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT).show();
}
});
}
}
这样实现了请求者和提供者之间的通讯