首先要添加依赖
def room_version = "2.4.0" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:2.4.0"
这里使用了viewmodel,是代码更好的封装,分类
MainActivity,这里只控制了4个按钮
package com.example.roombasic; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.room.Room; import androidx.room.Update; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.nio.channels.AsynchronousChannelGroup; import java.util.List; public class MainActivity extends AppCompatActivity { Button insert, update, clear, delete; TextView textView; WordViewModel wordViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wordViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(WordViewModel.class); textView = findViewById(R.id.textView); wordViewModel.getAllWordsLive().observe(this, new Observer<List<Word>>() { @Override public void onChanged(List<Word> words) { StringBuilder text = new StringBuilder(); for (int i = 0; i < words.size(); i++) { Word word = words.get(i); text.append(word.getId()).append(":").append(word.getWord()).append("=").append(word.getChieseMeaning()).append("\n"); } textView.setText(text.toString()); } }); insert = findViewById(R.id.insert); clear = findViewById(R.id.clear); delete = findViewById(R.id.delete); update = findViewById(R.id.update); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Word word = new Word("Hellow", "你好"); Word word1 = new Word("World", "世界"); wordViewModel.insertWord(word, word1); } }); clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { wordViewModel.deleteAllWord(); } }); update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Word word = new Word("Hi", "你好啊"); word.setId(10); wordViewModel.updateWord(word); } }); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Word word = new Word("world", "世界"); word.setId(32); wordViewModel.deleteWord(word); } }); } }
WordViewModel
package com.example.roombasic; import android.app.Application; import android.os.AsyncTask; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import java.util.List; public class WordViewModel extends AndroidViewModel { private WordRepository wordRepository; public WordViewModel(@NonNull Application application) { super(application); wordRepository = new WordRepository(application); } public LiveData<List<Word>> getAllWordsLive() { return wordRepository.getAllWordsLive(); } void insertWord(Word... words) { wordRepository.insertWord(words); } void updateWord(Word... words) { wordRepository.updateWord(words); } void deleteWord(Word... words) { wordRepository.deleteWord(words); } void deleteAllWord(Void... Voids) { wordRepository.deleteAllWord(); } }
WordRepository(存储库)1.通过WordDataBase连接数据库 2.通过WordDao来进行对数据的增删改查
package com.example.roombasic; import android.content.Context; import android.os.AsyncTask; import androidx.lifecycle.LiveData; import java.util.List; public class WordRepository { private LiveData<List<Word>> allWordsLive; private WordDao wordDao; public WordRepository(Context context) { WordDatabase wordDatabase = WordDatabase.getDatabase(context.getApplicationContext()); wordDao = wordDatabase.getWordDao(); allWordsLive = wordDao.getAllWordsLive(); } public LiveData<List<Word>> getAllWordsLive() { return allWordsLive; } void insertWord(Word... words) { new InsertAsyncTask(wordDao).execute(words); } void updateWord(Word... words) { new UpdateAsyncTask(wordDao).execute(words); } void deleteWord(Word... words) { new DeleteAsyncTask(wordDao).execute(words); } void deleteAllWord(Void... voids) { new DeleteAllAsyncTask(wordDao).execute(); } static class InsertAsyncTask extends AsyncTask<Word, Void, Void> { private WordDao wordDao; public InsertAsyncTask(WordDao wordDao) { this.wordDao = wordDao; } @Override protected Void doInBackground(Word... words) { wordDao.insertWords(words); return null; } } static class UpdateAsyncTask extends AsyncTask<Word, Void, Void> { private WordDao wordDao; public UpdateAsyncTask(WordDao wordDao) { this.wordDao = wordDao; } @Override protected Void doInBackground(Word... words) { wordDao.updateWords(words); return null; } } static class DeleteAsyncTask extends AsyncTask<Word, Void, Void> { private WordDao wordDao; public DeleteAsyncTask(WordDao wordDao) { this.wordDao = wordDao; } @Override protected Void doInBackground(Word... words) { wordDao.deleteWords(words); return null; } } static class DeleteAllAsyncTask extends AsyncTask<Void, Void, Void> { private WordDao wordDao; public DeleteAllAsyncTask(WordDao wordDao) { this.wordDao = wordDao; } @Override protected Void doInBackground(Void... voids) { wordDao.deleteAllWords(); return null; } } }
WordDataBase synchronized是数据库变得单实例化
package com.example.roombasic; import android.content.Context; import androidx.room.Database; import androidx.room.Insert; import androidx.room.Room; import androidx.room.RoomDatabase; //singleton @Database(entities = {Word.class}, version = 1, exportSchema = false) public abstract class WordDatabase extends RoomDatabase { private static WordDatabase INSTANCE; static synchronized WordDatabase getDatabase(Context context){ if(INSTANCE==null){ INSTANCE= Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word_database").build(); } return INSTANCE; } public abstract WordDao getWordDao(); }
WordDao 增删改查工具类
package com.example.roombasic; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; import java.util.List; @Dao public interface WordDao { @Insert void insertWords(Word... words); @Update void updateWords(Word... words); @Delete void deleteWords(Word... words); @Query("DELETE FROM WORD") void deleteAllWords(); @Query("SELECT * FROM WORD ORDER BY ID DESC") LiveData<List<Word>> getAllWordsLive(); }
Word 数据类
package com.example.roombasic; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity public class Word { @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "english_word") private String word; @ColumnInfo(name = "chinese_word") private String chieseMeaning; public Word(String word, String chieseMeaning) { this.word = word; this.chieseMeaning = chieseMeaning; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public String getChieseMeaning() { return chieseMeaning; } public void setChieseMeaning(String chieseMeaning) { this.chieseMeaning = chieseMeaning; } }