我在理解应该将代码放在哪里连接数据库时遇到了一些问题。我认为Presenter是正确的地方,但是要连接到数据库,我需要上下文。我应该将上下文从View传递到Presenter进行连接吗?还是应该在View中连接数据库(我认为这是个坏主意)?
下一个问题是如何在与主线程不同的线程上实现连接。
我尝试通过以下步骤使其工作:在视图中连接到db,将该连接从视图传递到演示者,并在演示者中创建新线程。在新线程中,我从db中获取数据,然后我希望将该数据传递给查看。但是要实现这一点,我需要等待该线程完成。我不知道该怎么做,但我仍然认为这不是一个好习惯。
主持人之一
class ListOfMealsPresenter(val mealkyDatabase: MealkyDatabase) :
BasePresenter<ListOfMealsContract.View>(), ListOfMealsContract.Presenter {
override fun getAllMeals(): List<MealData> {
val handlerThread = HandlerThread("MyHandlerThread")
handlerThread.start()
val looper = handlerThread.looper
val handler = Handler(looper)
var meals:List<MealData> = emptyList()
val task = Runnable {
meals = mealkyDatabase?.mealDao()?.getAll()
}
handler.post(task)
handlerThread.join()
handlerThread.quit()
return meals
}
部分视图:
class ListOfMealsActivity : AppCompatActivity(), ListOfMealsContract.View {
private lateinit var meals: List<MealData>
override fun loadData() {
meals = presenter.getAllMeals()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
presenter = ListOfMealsPresenter(MealkyDatabase.getInstance(this)!!)
loadData()
}