java - 移动端接口的设计问题
高洛峰
高洛峰 2017-04-18 09:54:14
0
5
1020

现有学生实体类 Student

public class Student {
    private int no;
    private String name;
    private int score;
}

需要为移动端提供数据查看学生成绩,数据源未使用数据库仅使用Java集合,若Server的数据源为List<Student>,内容如下:

0 张三 58
1 李四 42
2 王五 23

假设移动端每次请求只显示两条数据,则首次显示

0 张三 58
1 李四 42

移动端下拉页面,请求下一页数据,并将no=1发回给Server,此时移动端就多了一条数据,变为:

0 张三 58
1 李四 42
2 王五 23 --下拉后得到的新数据

若数据源固定不变这样是没有问题的,但实际情况是学生的信息会随时变化,即可能在移动端下拉请求下一页之前"1 李四 42"这条数据就没有了,此时再将no=1发回给Server会产生各种各样的问题,例如:同一条数据显示两次、有的未被显示等问题,有什么方法在不使用数据库的情况下按这种方式为移动端提供列表数据呢?想不通哇=。=

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(5)
伊谢尔伦

Vous n'avez pas encore effectué de recherche de personnes sur mobile ? ? Lorsque la pagination mobile implique une modification de données, elle ne doit pas être basée sur page=1, sinon elle sera répétée ou manquée (C'est normal de la manquer, vous la retrouverez après l'avoir répétée sur le client)
La solution générale est. comme suit :
Tout d'abord, vous devez faire un tri, comme par temps, score, etc. Si le client souhaite passer à la page suivante, il lui suffit de transmettre l'identifiant du dernier enregistrement de l'enregistrement en cours Le serveur obtiendra cet identifiant. Recherchez ensuite les données suivantes et donnez-les-lui.
Exemple :
Supposons que les données du serveur soient 1,2,3,4,5,6,7,8 et que les données renvoyées au client soient 1,2,3. À ce moment, les données après. 3 est nécessaire, donc 3 Renvoyez-le au serveur, le serveur obtient 3 puis selon la logique convenue, il trouve 4, 5, 6 qui sont plus grands que 3 et les donne au client, afin qu'il n'y ait pas problème de duplication même si on l'ajoute ou le supprime
C'est ainsi qu'on affichait les images de flux en cascade Oui, en plus, de nombreuses API de FB et Instagram sont conçues de cette manière

.
洪涛

no=1 Si vous l'avez, cherchez no=2

迷茫

Vous n'utilisez pas de base de données, alors comment se fait-il que les données disparaissent ?
La pagination est-elle possible D'après la liste que vous avez enregistrée, similaire au pseudo-code suivant :
`
Liste<x> list1 = list.subList (0,3);
List<x> list2 = list.subList(3,6);
List<x> `

阿神

C'est vraiment gênant lorsque les données de la liste paginée sont supprimées...

Il y a 3 solutions à considérer :

  1. Si la quantité de données est faible, n'effectuez pas de pagination, donnez simplement toutes les données de la liste au client en même temps

  2. Si la quantité de données est importante et doit être paginée, vous pouvez envisager non seulement de transmettre les données de la page à obtenir à chaque fois, mais également de transmettre les diff (modifications) des données de la page qui a été obtenu préalablement au client

  3. .
  4. Si les données changent, envoyez un indicateur indiquant que les données ont changé au client, permettant au client d'actualiser la liste entière ou d'inviter l'utilisateur à actualiser la liste entière.

伊谢尔伦

Triez d'abord la collection d'étudiants par identifiant, puis utilisez l'identifiant et la taille des dernières données de la requête précédente comme paramètres d'entrée de la demande de pagination. L'identifiant ici est Student.no.

for(Student student:students){
  if(student.no>lastId){
      result.add(student);
      if(result.size()==size){
          return result;
      }
  }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal