1.因为用到contentpriver四大主键之一 所以要在项目01中注册
<provider
android:authorities="com.example.myapplication" //这个应用的地址
android:name=".contentpriver"
android:enabled="true"
android:exported="true" //是否让别的应用程序访问 ></provider>
1.创建项目01
2.创建数据库类继承SQLiteOpenHelper
public class mysql extends SQLiteOpenHelper {
public mysql(Context context) {
super(context,"Student",null,1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table student(_id integer primary key autoincrement,name varchar(10),age varchar(10))");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
3.创建操作数据库的类ContentProvider
public class contentpriver extends ContentProvider {
//content://是固定的 com.example.hasee.myapplication1是你的项目01的包名 student这是你的数据库表的名字
private String path="content://alice.bw.com.contentprovider_provider/student";
private SQLiteDatabase read;
@Override
public boolean onCreate() {
mysql my = new mysql(getContext());
//数据库的工具类
read = my.getReadableDatabase();
return false;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
Cursor student = read.query("student", strings, s, strings1, null, null, s1);
return student;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
long student = read.insert("student", null, contentValues);
Uri uri1 = ContentUris.withAppendedId(uri, student);
return uri1;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
int student = read.delete("student", s, strings);
return student;
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
int student = read.update("student", contentValues, s, strings);
return student;
}
}
4.主函数不用写
5.创建项目02
6.创建listview的适配器继承BaseAdapter 你也可以用recyclerview
public class spq extends BaseAdapter {
private ArrayList<student> arr;
private Context con;
public spq(ArrayList<student> arr, Context con) {
this.arr = arr;
this.con = con;
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int i) {
return arr.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
youhua you = null;
if(view==null){
view= View.inflate(con, R.layout.buju, null);
you=new youhua();
you.tv1=view.findViewById(R.id.tv1);
you.tv2=view.findViewById(R.id.tv2);
view.setTag(you);
}else {
you= (youhua) view.getTag();
}
you.tv1.setText(arr.get(i).getName());
you.tv2.setText(arr.get(i).getAge());
return view;
}
class youhua{
TextView tv1;
TextView tv2;
}
}
7.创建实体类
public class student {
private String name;
private String age;
public student(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
8.在主函数里面写逻辑
public class MainActivity extends AppCompatActivity {
private ArrayList<student> arr;
private ListView lv;
private ContentResolver con;
//content://是固定的 com.example.hasee.myapplication1是你的项目01的包名 student这是你的数据库表的名字
private String url="content://com.example.hasee.myapplication1/student";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
//这和contentpriver是成对出现的
con= getContentResolver();
arr=new ArrayList<>();
}
public void cc(View view) {
switch (view.getId()){
case R.id.but1:
insertStudent();
break;
case R.id.but2:
arr.clear();
queryStudent();
break;
case R.id.but3:
break;
}
}
private void insertStudent() {
View dialogView = View.inflate(this, R.layout.dialog_layout, null);
final EditText name_et = dialogView.findViewById(R.id.et1);
final EditText age_et = dialogView.findViewById(R.id.et2);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher).setTitle("警告").setMessage("插入一个学生").setView(dialogView)
.setPositiveButton("确认",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = name_et.getText().toString();
String age = age_et.getText().toString();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
con.insert(Uri.parse(url), values);
}
});
builder.show();
}
public void queryStudent(){
Cursor query = con.query(Uri.parse(url), null, null, null, null);
if(query!=null){
while (query.moveToNext()){
String name = query.getString(query.getColumnIndex("name"));
String age = query.getString(query.getColumnIndex("age"));
student stu = new student(name, age);
arr.add(stu);
}
}
lv.setAdapter(new spq(arr,this));
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.example.myapplication.MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入"
android:onClick="cc"/>
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"
android:onClick="cc"/>
<Button
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"
android:onClick="cc"/>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
对话框布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>