Maison > Questions et réponses > le corps du texte
现有学生实体类 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会产生各种各样的问题,例如:同一条数据显示两次、有的未被显示等问题,有什么方法在不使用数据库的情况下按这种方式为移动端提供列表数据呢?想不通哇=。=
伊谢尔伦2017-04-18 09:56:14
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
迷茫2017-04-18 09:56:14
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> `
阿神2017-04-18 09:56:14
C'est vraiment gênant lorsque les données de la liste paginée sont supprimées...
Il y a 3 solutions à considérer :
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
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
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.
伊谢尔伦2017-04-18 09:56:14
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;
}
}
}