我需要从服务器获取数据列表,输入到适配器,并在列表视图中显示。
问题是谁应该进行后端呼叫,活动或适配器或?
请详细说明原因。这个问题更多的是为什么而不是如何。
请在模型视图控制器或类似设备中回答(严格来说,我知道android没有MVC)上下文。
编辑:
现在很明显,适配器是一个非常糟糕的获取数据的地方(想象它会有多么不灵活。例如,如果有类似数据的两个端点会怎么样。或者我有两个相同数据集的适配器,让其中一个适配器获取数据是没有意义的。其他组件应该是获取数据和填充适配器。活动是一个很好的组成部分。
接受的答案提供了这样做的说明。
答案 0 :(得分:1)
从不从活动中获取数据,因为它会阻止用户界面。
您应该使用参数扩展 AsyncTask ,并根据需要返回类型。 你可以使用方法 doInBackground (@Override it)和方法 onPostExecute (@Override it),在Activity上调用一些公共方法来为它提供数据你抓了。
最后,带有新数据的Activity应该将其提供给适配器。
这就是我总是得到我的数据的方法,并且我得到了100%的结果(添加一个progressBar并在获取数据之前使其可见,并在将其提供给适配器后使其不可见)。
希望我对你很清楚。如果您想要一些代码作为示例,请询问。
<强>工作流强>:
1 - 活动 - &gt; new MyAsyncTask(...)。execute(); //获取数据@Override doInBackGround
2 - MyAsyncTask.onPostExecute(){myActivity.giveFreshData(...)} //传递数据
3 - Activity.giveFreshData(...){MyListAdapter.giveMyData(...)}
尽管不是MVC,但你应该如何将UI与数据消费和数据表示分开。
答案 1 :(得分:0)
他们都没有,我会创建一个发出请求并将其转换为对象的类,然后活动接受这些对象并将它们传递给适配器。
实际上,只有当这是异步任务时,您才可以直接从活动中获取数据。 (但它会生成重复的代码)
Adapter类通常用于将对象转换为列表中可见的内容和类似的东西
活动就像一个控制器,它与从服务器和适配器获取数据的类进行交互。
然后你需要一个类来获取数据并将其返回到java对象中(这不是必需的,但如果你使用的是MVC,那么这是最正确的方法)。此外,如果直接从活动中调用asynctask,如果存在需要执行相同请求的更多活动,那么您将拥有重复的代码(并且每个人都知道它永远不会好)。然后就是为什么我们需要另一个将请求转换为活动捕获的回调中的对象的类,这个类可以从所有活动或类中重用。