自定义ContentProvider
ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能
1.提供方:ContentProvider
(1)创建数据库,自定义类继承SQLiteOpenHelper
(2)自定义内容提供者类,继承ContentProvider,重写insert/delete/update/query方法,向外界提供方法
(3)清单文件中注册内容提供者
2.索要方:ContentResolver
(1)通过Context的getContentResolver方法获得ContentResolver对象
(2)确定uri
(3)调用insert/delete/update/query方法访问数据库
提供方
//自定义ContentProvider
public class Myprovider extends ContentProvider {
SQLiteDatabase database;
@Override
public boolean onCreate() {
Myhelper myhelper=new Myhelper(getContext());
database = myhelper.getWritableDatabase();
if (database==null){
return false;
}else {
return true;
}
}
@Override
public Cursor query(Uri uri, String[] projection,String selection, String[] selectionArgs,String sortOrder) {
Cursor cursor = database.query("student", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert( Uri uri, ContentValues values) {
long student = database.insert("student", null, values);
if (student>0){
return uri;
}else {
return null;
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return database.delete("student",selection,selectionArgs);
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return database.update("student",values,selection,selectionArgs);
}
}
//创建数据库 添加10条数据
public class Myhelper extends SQLiteOpenHelper {
public Myhelper(Context context) {
super(context, "lala.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table student (name varchar(20),age integer,sex varchar(20))");
for (int i =0;i<10;i++){
ContentValues values=new ContentValues();
values.put("name","刘瑞"+(i+1));
values.put("age",(i+1));
values.put("sex","男");
db.insert("student",null,values);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
解析方
//实现增删改查
//主类
public class MainActivity extends AppCompatActivity {
ContentResolver contentResolver;
Uri uri;
ArrayList<Student> arrayList=new ArrayList<>();
Button button;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.btn);
listView=findViewById(R.id.lis);
contentResolver= getContentResolver();
uri= Uri.parse("content://com.bw.liurui");
new MyTask(MainActivity.this).execute();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Student student = arrayList.get(position);
final String name = student.getName();
final PopupWindow popupWindow=new PopupWindow();
popupWindow.setWidth(1200);
popupWindow.setHeight(800);
View inflate = View.inflate(MainActivity.this, R.layout.popup1_layout, null);
final EditText editText1 = inflate.findViewById(R.id.et1);
final EditText editText2 = inflate.findViewById(R.id.et2);
final EditText editText3 = inflate.findViewById(R.id.et3);
Button button = inflate.findViewById(R.id.btnupdate);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name1 = String.valueOf(editText1.getText());
String ag = String.valueOf(editText2.getText());
String sex = String.valueOf(editText3.getText());
if (name1.equals("")&&ag.equals("")&&sex.equals("")){
Toast.makeText(MainActivity.this,"不能为空",Toast.LENGTH_SHORT).show();
}else {
int age = Integer.parseInt(ag);
ContentValues values=new ContentValues();
values.put("name",name1);
values.put("age",age);
values.put("sex",sex);
contentResolver.update(uri,values,"name=?",new String[]{name});
popupWindow.dismiss();
new MyTask(MainActivity.this).execute();
}
}
});
popupWindow.setOutsideTouchable(true);
popupWindow.setContentView(inflate);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(inflate, Gravity.BOTTOM,0,0);
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupWindow popupWindow=new PopupWindow();
popupWindow.setWidth(1200);
popupWindow.setHeight(800);
View inflate = View.inflate(MainActivity.this, R.layout.popup2_layout, null);
final EditText editText1 = inflate.findViewById(R.id.et1);
final EditText editText2 = inflate.findViewById(R.id.et2);
final EditText editText3 = inflate.findViewById(R.id.et3);
Button button = inflate.findViewById(R.id.btnupdate);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name1 = String.valueOf(editText1.getText());
String ag = String.valueOf(editText2.getText());
String sex = String.valueOf(editText3.getText());
if (name1.equals("")&&ag.equals("")&&sex.equals("")){
Toast.makeText(MainActivity.this,"不能为空",Toast.LENGTH_SHORT).show();
}else {
int age = Integer.parseInt(ag);
ContentValues values=new ContentValues();
values.put("name",name1);
values.put("age",age);
values.put("sex",sex);
contentResolver.insert(uri,values);
popupWindow.dismiss();
new MyTask(MainActivity.this).execute();
}
}
});
popupWindow.setOutsideTouchable(true);
popupWindow.setContentView(inflate);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(inflate, Gravity.BOTTOM,0,0);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Student student = arrayList.get(position);
String name = student.getName();
contentResolver.delete(uri, "name=?", new String[]{name});
new MyTask(MainActivity.this).execute();
return true;
}
});
}
}
//适配器类
public class Myad extends BaseAdapter {
MainActivity activity;
public Myad(MainActivity activity) {
this.activity = activity;
}
@Override
public int getCount() {
return activity.arrayList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null){
viewHolder =new ViewHolder();
convertView = View.inflate(activity, R.layout.itemlayout, null);
viewHolder.textView1=convertView.findViewById(R.id.tv1);
viewHolder.textView2=convertView.findViewById(R.id.tv2);
viewHolder.textView3=convertView.findViewById(R.id.tv3);
convertView.setTag(viewHolder);
}else {
viewHolder=(ViewHolder)convertView.getTag();
}
Student student = activity.arrayList.get(position);
String name = student.getName();
int age = student.getAge();
String sex = student.getSex();
viewHolder.textView1.setText(name);
viewHolder.textView2.setText(age+"");
viewHolder.textView3.setText(sex);
return convertView;
}
class ViewHolder{
TextView textView1;
TextView textView2;
TextView textView3;
}
}
//异步刷新适配器
public class MyTask extends AsyncTask<String,String,Myad> {
MainActivity activity;
public MyTask(MainActivity activity) {
this.activity = activity;
}
@Override
protected Myad doInBackground(String... strings) {
activity.arrayList.clear();
Cursor query = activity.contentResolver.query(activity.uri, null, null, null, null);
while(query.moveToNext()){
String name = query.getString(query.getColumnIndex("name"));
int age = query.getInt(query.getColumnIndex("age"));
String sex = query.getString(query.getColumnIndex("sex"));
Student student=new Student(name,age,sex);
activity.arrayList.add(student);
}
Myad myad=new Myad(activity);
myad.notifyDataSetChanged();
return myad;
}
@Override
protected void onPostExecute(Myad myad) {
super.onPostExecute(myad);
activity.listView.setAdapter(myad);
}
}
// student类
public class Student {
private String name;
private int age;
private String sex;
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}