Android room操作数据库
16lz
2021-01-23
1,在gradle中添加依赖:
def room_version = "2.2.0-rc01" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
2,创建数据库
package com.example.pagingdemo;import androidx.room.ColumnInfo;import androidx.room.Entity;import androidx.room.PrimaryKey;@Entity(tableName = "student_table")public class Student { @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "student_number") private int studentNumber; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getStudentNumber() { return studentNumber; } public void setStudentNumber(int studentNumber) { this.studentNumber = studentNumber; }}
3,创建DAO
DAO,即数据访问接口。可以将SQL查询语句与方法相关联。
DAO必须是接口或抽象类。
package com.example.pagingdemo;import androidx.lifecycle.LiveData;import androidx.paging.DataSource;import androidx.room.Dao;import androidx.room.Insert;import androidx.room.Query;import java.util.List;@Daopublic interface StudentDao {// 插入 @Insert void insertStudents(Student ...students);// 清除 @Query("DELETE FROM STUDENT_TABLE") void deleteAllStudents();// 查询所有 @Query("SELECT * FROM STUDENT_TABLE ORDER BY ID") LiveData> getAllStudentLive; //DataSource.Factory getAllstudents();}
4,实现Room数据库
package com.example.pagingdemo;import android.content.Context;import androidx.room.Database;import androidx.room.Room;import androidx.room.RoomDatabase;@Database(entities = {Student.class},version = 1,exportSchema = false)public abstract class StudentsDatabase extends RoomDatabase { private static StudentsDatabase instance; public synchronized static StudentsDatabase getInstance(Context context) { if(instance == null){ instance = Room.databaseBuilder(context,StudentsDatabase.class,"students_database").build(); } return instance; } abstract StudentDao getStudentDao();}
5,RecyclerView提供
package com.example.pagingdemo;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.paging.PagedListAdapter;import androidx.recyclerview.widget.DiffUtil;import androidx.recyclerview.widget.RecyclerView;public class MyPagedAdapter extends PagedListAdapter { public MyPagedAdapter() { super(new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(@NonNull Student oldItem, @NonNull Student newItem) { return oldItem.getId() == newItem.getId(); } @Override public boolean areContentsTheSame(@NonNull Student oldItem, @NonNull Student newItem) { return oldItem.getStudentNumber() == newItem.getStudentNumber(); } }); } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //创建视图 LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View view=inflater.inflate(R.layout.cell,parent,false); return new MyViewHolder(view); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { Student student = getItem(position); if(student == null){ holder.textView.setText("loading"); }else{ holder.textView.setText(String.valueOf(student.getStudentNumber())); } } static class MyViewHolder extends RecyclerView.ViewHolder{ TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } }}
6,activity实现
package com.example.pagingdemo;import androidx.appcompat.app.AppCompatActivity;import androidx.lifecycle.LiveData;import androidx.lifecycle.Observer;import androidx.paging.LivePagedListBuilder;import androidx.paging.PagedList;import androidx.paging.PagedListAdapter;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; Button buttonPopulate, buttonClear; StudentDao studentDao; StudentsDatabase studentsDatabase; MyPagedAdapter pagedAdapter; LiveData> allStudentsPaged; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取滚动列表,还有一个配套的adapter recyclerView = findViewById(R.id.recyclerView); pagedAdapter = new MyPagedAdapter(); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(pagedAdapter); studentsDatabase = StudentsDatabase.getInstance(this); studentDao = studentsDatabase.getStudentDao(); allStudentsPaged = new LivePagedListBuilder<>(studentDao.getAllstudents(), 5).build(); allStudentsPaged.observe(this, new Observer>() { @Override public void onChanged(PagedList students) { pagedAdapter.submitList(students); } }); buttonPopulate = findViewById(R.id.buttonPopulate); buttonClear = findViewById(R.id.buttonClear); buttonPopulate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Student[] students = new Student[1000]; for (int i = 0;i { StudentDao studentDao; //传入数据库操作 public InsertAsyncTask(StudentDao studentDao) { this.studentDao = studentDao; } @Override protected Void doInBackground(Student... students) { studentDao.insertStudents(students); return null; } } //清空 static class ClearAsyncTask extends AsyncTask{ StudentDao studentDao; public ClearAsyncTask(StudentDao studentDao) { this.studentDao = studentDao; } @Override protected Void doInBackground(Void... voids) { studentDao.deleteAllStudents(); return null; } }}
更多相关文章
- android 数据库初体验
- Android 自定义滚动视图
- android intent 传递对象需要序列化实现Parcelable接口
- Android之View的视图测量过程
- Android MediaPlayer Playback---多媒体开发应用程序接口
- 操作Android 手机通讯录数据库
- Android 开发中的常用的上传下载接口
- Android 通过接口的方式去调用服务里面的方法
- Android 数据存储(数据库、文件、参数)操作实例