我在跟踪
this tutorial
但现在我想把wordrepository类转换成kotlin。我对科特林非常陌生,所以我试着用
this online kotlin converter
并从第一个链接复制粘贴了java wordrepository类。下面是原始Java代码BTW:
public class WordRepository {
private WordDao mWordDao;
private LiveData<List<Word>> mAllWords;
WordRepository(Application application) {
WordRoomDatabase db = WordRoomDatabase.getDatabase(application);
mWordDao = db.wordDao();
mAllWords = mWordDao.getAllWords();
}
LiveData<List<Word>> getAllWords() {
return mAllWords;
}
public void insert (Word word) {
new insertAsyncTask(mWordDao).execute(word);
}
private static class insertAsyncTask extends AsyncTask<Word, Void, Void> {
private WordDao mAsyncTaskDao;
insertAsyncTask(WordDao dao) {
mAsyncTaskDao = dao;
}
@Override
protected Void doInBackground(final Word... params) {
mAsyncTaskDao.insert(params[0]);
return null;
}
}
}
下面是我从在线转换器获得的Kotlin代码:
class WordRepository internal constructor(application:Application) {
private val mWordDao:WordDao
internal val allWords:LiveData<List<Word>>
init{
val db = WordRoomDatabase.getDatabase(application)
mWordDao = db.wordDao()
allWords = mWordDao.getAllWords()
}
fun insert(word:Word) {
insertAsyncTask(mWordDao).execute(word)
}
private class insertAsyncTask internal constructor(dao:WordDao):AsyncTask<Word, Void, Void>() {
private val mAsyncTaskDao:WordDao
init{
mAsyncTaskDao = dao
}
protected fun doInBackground(vararg params:Word):Void {
mAsyncTaskDao.insert(params[0])
return null
}
}
}
请注意,为了使上面的代码起作用,我更改了
WordRoomDatabase.getDatabase(application)
到
WordRoomDatabase.getInstance(application)
因为我还将wordroomdatabase更改为kotlin,它不再具有getdatabase函数。以下是wordroomdatabase的外观
abstract class WordRoomDatabase: RoomDatabase(){
companion object {
private var INSTANCE: WordRoomDatabase? = null
fun getInstance(context: Context): WordRoomDatabase? {
if (INSTANCE == null){
synchronized(WordRoomDatabase::class){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
WordRoomDatabase::class.java, "sps.db")
.build()
}
}
return INSTANCE
}
fun destroyInstance(){
INSTANCE == null
}
}
}
但是,代码不起作用,特别是这一部分:
mWordDao = db.wordDao();
显示错误
只有安全的?)或非空断言(!!)允许在
appdatabase类型的可空接收器?