package com.example.user.android2lesson_05_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); } }
创建一个数据库帮助类,用于数据的存储和访问
package com.example.user.android2lesson_05_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) { } }自定义一个内容提供者,创建一个类 继承自contentprovider
package com.example.user.android2lesson_05_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 StudentProvider extends ContentProvider { // 1.声明两个属性,用来存储操作的对象 private DBhelper helper; private SQLiteDatabase sqLiteDatabase; @Override public boolean onCreate() { helper=new DBhelper(getContext(),"student_db",null,1); sqLiteDatabase=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表中 sqLiteDatabase.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; } }还有别忘记在清单文件中注册
XML..........................
接着创建一个内容提供者,实现CRUD操作
package com.example.user.android2lesson_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",23); // 使用内容处理者进行数据的插入 resolver.insert(Uri.parse("content://com.coderqi.student"),values); Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show(); } }); } }最后在xml写个控件,基本ok了 欢迎大神们一起讨论,指教