我有一个使用MVP设计的应用程序实现,我想使用SQLlite数据库将数据源提供给UI View
。我不想/需要使用ContentProvider
因为我的应用程序仅需要数据。
我知道View
应该是“愚蠢的”,任何“商业”逻辑都应该放在Presenter
和Model
中。但Presenter
应该不包含Android代码,以便进行独立的单元测试。
那么,如果我不能在Model
中使用Presenter
,如何将View
的SQLite数据传输回cursor
,然后再传递Presenter
MVP
?
我可以使用回调但是创建自己的数据结构的'正确'方法,将数据加载到那里然后在回调中传递列表?
我希望忠于Context
设计。
我已经用Google搜索了这篇文章,虽然在处理Presenter
中的<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gts="http://www.isotc211.org/2005/gts"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gml="http://www.opengis.net/gml"
xmlns:geonet="http://www.fao.org/geonetwork">
<xsl:output method="text" encoding="utf-8" />
<!-- identity templates walks tree and suppresses nodes with no template -->
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<!-- output only on nodes we select -->
<xsl:template match="node()|@*" mode="output">
<xsl:copy>
<xsl:apply-templates select="node()|@*" mode="output"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gmd:pointOfContact/gmd:CI_ResponsibleParty">
<xsl:choose>
<xsl:when test="gmd:individualName/gco:CharacterString">
<xsl:text>Responsible: </xsl:text>
<xsl:apply-templates mode="output"/>
<xsl:text>;</xsl:text>
</xsl:when>
<xsl:otherwise>NO Responsible: ;</xsl:otherwise>
</xsl:choose>
</xsl:template>
时有很多东西,但使用其他Android数据结构并不是很多。
答案 0 :(得分:0)
即使在演示者中,您也不应该在视图中访问SQLite。
对模型的所有访问都是在模型层中进行的,因此如果您需要从视图/演示者中与该光标进行交互,则必须创建调用它的方法:
从View调用presenter方法 - &gt;来自Presenter呼叫模型方法 - &gt;从模型调用它的光标交互方法。
反之亦然。
所以...你需要的应该是这样的:
查看某些需要某些数据的presenter方法(presenter.loadInfo(...)) - &gt; Presenter调用模型(UseCase,模型类等)[model.loadData(...)] - &gt; Model有一个属性或数据库网关,所以它要求一个查询,一旦它有de info,它就会返回到演示者。
预计它将是异步的,因此创建一个回调并从演示者调用它:
model.loadInfo(..., new onResponseCallback() {
method onResponse(MyResponseClass response) {
//Manage your response as you want
view.showData(...)
}
method onFailure(MyFailureClass failure) {
view.showFailure...
}
});