安卓四大组件之一ContentProvider内容提供者
前提:这里我们需要准备好数据库,及数据的创建。可以使用Naviact,当然也可以用安卓代码。这里我们用安卓代码来实现。
1.创建一个项目,名为contentprovider .
在xml文件里写两个输入框,一个按钮,用来添加数据。如下图:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后写一个Dbhelp类用来创建数据库。代码如下:
public class DBhelp extends SQLiteOpenHelper{ ----继承一个SQLiteOpenHelper
public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
Log.i("test","构造方法");
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
// Log.i("test","onCreate");
db.execSQL("create table tbUser(_id integer primary key autoincrement,uname,uage)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ---数据库版本升级后调用(修改数据库后调用)
Log.i("test","onUpgrade");
}
super(context, name, factory, version);
Log.i("test","构造方法");
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
// Log.i("test","onCreate");
db.execSQL("create table tbUser(_id integer primary key autoincrement,uname,uage)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ---数据库版本升级后调用(修改数据库后调用)
Log.i("test","onUpgrade");
}
}
就这样DBHELP类写完了。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
接着我们就开始写MainActivity
public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private EditText et_main_uage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_uname = (EditText) findViewById(R.id.et_main_uname); et_main_uage = (EditText) findViewById(R.id.et_main_uage); } //操作按钮的方法 public void operation(View view) { String uname = et_main_uname.getText().toString(); String uage = et_main_uage.getText().toString(); Dbhelp dbHelper = new Dbhelp(this, "G160828.db", null, 1); SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); for (int i = 1; i <= 100; i++) { sqLiteDatabase.execSQL("insert into tbUser(uname,uage) values('" + uname + i + "'," + uage + ")"); } Toast.makeText(this, "操作成功", Toast.LENGTH_SHORT).show(); } }
让后我们就可以开始写提供者了
创建一个class文件
public class MyProvider extends ContentProvider {
private SQLiteDatabase sqLiteDatabase;
@Override
public boolean onCreate() {
DbHelper dbHelper=new DbHelper(getContext(),"G160828.db",null,1);
sqLiteDatabase = dbHelper.getReadableDatabase();
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
//查询数据
Log.i("test","查询");
return sqLiteDatabase.rawQuery("select * from tbUser",null);
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
}
private SQLiteDatabase sqLiteDatabase;
@Override
public boolean onCreate() {
DbHelper dbHelper=new DbHelper(getContext(),"G160828.db",null,1);
sqLiteDatabase = dbHelper.getReadableDatabase();
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
//查询数据
Log.i("test","查询");
return sqLiteDatabase.rawQuery("select * from tbUser",null);
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------
然后到清单文件里配置一***意要到<activity>标签外边
<!--配置 内容提供者-->
<provider
android:authorities="com.zking.administrator.g160828_android14_sqlite.User"
android:exported="true"
android:name=".MyProvider"></provider>
提供者就写完了!!!!
<provider
android:authorities="com.zking.administrator.g160828_android14_sqlite.User"
android:exported="true"
android:name=".MyProvider"></provider>
提供者就写完了!!!!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
接下来我们写访问者,访问提供者里面的数据。
接下来我们写访问者,访问提供者里面的数据。
简单的在xml里写个按钮,就像这样:
然后mainActivity文件里就这样写:
之后运行一下,去控制台看有没有数据,如果有就代表成功了!
就像这样:
好了,到这里就全部讲完了!