day09自定义ContentProvider

自定义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 + '\'' +
                '}';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值