Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MVC:谁应该获取数据、适配器或活动_Android_Model View Controller - Fatal编程技术网

Android MVC:谁应该获取数据、适配器或活动

Android MVC:谁应该获取数据、适配器或活动,android,model-view-controller,Android,Model View Controller,我需要从服务器获取数据列表,将数据馈送到适配器,并显示在列表视图中 问题是谁应该执行后端调用、活动或适配器 请详细说明原因。这个问题更多的是关于为什么而不是如何 请在模型-视图-控制器或类似(我知道严格来说android没有MVC)上下文中回答 编辑: 现在对我来说,很明显,适配器是获取数据的非常糟糕的地方(想象一下,它将多么不灵活。例如,如果类似类型的数据有两个端点会怎么样。或者我有两个适配器用于相同的数据集,让其中一个适配器获取数据是没有意义的)。其他组件应该是获取数据和填充适配器。活动是这

我需要从服务器获取数据列表,将数据馈送到适配器,并显示在列表视图中

问题是谁应该执行后端调用、活动或适配器

请详细说明原因。这个问题更多的是关于为什么而不是如何

请在模型-视图-控制器或类似(我知道严格来说android没有MVC)上下文中回答

编辑:

现在对我来说,很明显,适配器是获取数据的非常糟糕的地方(想象一下,它将多么不灵活。例如,如果类似类型的数据有两个端点会怎么样。或者我有两个适配器用于相同的数据集,让其中一个适配器获取数据是没有意义的)。其他组件应该是获取数据和填充适配器。活动是这样做的一个好组成部分


接受的答案提供了一个这样做的例子。

无论哪一个,我都不会创建一个类来发出请求并将其转换为对象,然后活动获取这些对象并将它们传递给适配器

实际上,只有在异步任务的情况下,才可以直接从活动中获取数据。(但它会生成重复的代码)

适配器类通常用于将对象转换为列表中可见的内容

该活动类似于一个控制器,它与从服务器和适配器获取数据的类进行交互


然后您将需要一个类来获取数据并将其返回到java对象中(这不是必需的,但是如果您使用的是MVC,这是最正确的方法)。另外,如果您直接从活动中调用asynctask,如果存在更多需要执行相同请求的活动,那么您将有重复的代码(每个人都知道这永远都不好)。这就是为什么我们需要另一个类将请求转换为活动捕获的回调中的对象,这个类可以从所有活动或类中重用。

从不从活动中获取数据,因为它将阻止用户界面

您应该使用参数和返回类型扩展AsyncTask。 在方法doInBackground(@Override it)和方法onPostExecute(@Override it)上执行操作时,在活动中调用一些公共方法,将获取的数据提供给它

最后,具有新数据的活动应该将其提供给do适配器

这就是我始终获取数据的方式,我可以100%地获得我想要的结果(在获取数据之前添加一个progressBar并使其可见,在将数据提供给适配器之后使其不可见)

希望我对你足够清楚。如果您想要一些代码作为示例,请询问

工作流

1-活动->新建MyAsyncTask(…).execute()//获取数据@Override doInBackGround

2-MyAsyncTask.onPostExecute(){myActivity.giveFreshData(…)}//传递数据

3-Activity.giveFreshData(…){MyListAdapter.giveMyData(…)}


尽管它不是MVC,但这是您应该如何将UI与数据使用和数据表示分开的方法。

如果您投票反对,请给出一个理由。如果你觉得这是错误的,为什么不指出原因呢?好问题!我正致力于解决这个问题(每次我使用RecyclerView时,我都会对它大惊小怪)。感谢你的评论,我没有说我要同步获取:)你永远不应该在主线程上努力工作(UI负责)-这是主要原因。不使用适配器的另一个原因是它不需要知道数据来自何处。好的,我只提到了AsyncTask,因为我不知道您对Android SDK有多熟悉。我喜欢将活动视为表演,将异步任务视为传输者,将适配器视为工作者。希望我的类比能帮助你!当然,您应该使用AsyncTask(或类似的东西)。我很好奇为什么要在活动中与适配器或第三类(如控制器)相反