在哪里连接数据库,Android MVP

时间:2018-06-23 15:41:03

标签: android database multithreading mvp

我在理解应该将代码放在哪里连接数据库时遇到了一些问题。我认为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()
}

0 个答案:

没有答案