现有学生实体类 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会产生各种各样的问题,例如:同一条数据显示两次、有的未被显示等问题,有什么方法在不使用数据库的情况下按这种方式为移动端提供列表数据呢?想不通哇=。=
아직 모바일 호출을 하지 않으셨나요? ? 모바일 페이징에 데이터 변경이 포함되는 경우 page=1을 기반으로 해서는 안 됩니다. 그렇지 않으면 반복되거나 누락됩니다. (놓쳐도 괜찮습니다. 클라이언트에서 반복한 후에 찾을 수 있습니다.)
일반적인 해결 방법은 다음과 같습니다.
우선 시간, 점수 등의 정렬이 필요합니다. 클라이언트가 다음 페이지로 이동하려면 현재의 마지막 레코드의 식별자만 전달하면 됩니다. 그러면 서버는 이 식별자를 가져오고 다음 데이터를 제공합니다.
예:
서버 데이터가 1,2,3,4,5,6,7,8이고 클라이언트에 반환되는 데이터가 1,2,3이라고 가정합니다. 3이 필요하므로 3을 서버에 다시 전달하면 서버는 3을 얻은 다음 합의된 논리에 따라 3보다 큰 4, 5, 6을 찾아서 클라이언트에 제공하므로 더 이상 발생하지 않습니다. 추가하거나 삭제해도 중복 문제가 발생합니다
예전에는 폭포 흐름 사진을 표시하는 방법이었습니다. 또한 FB 및 Instagram의 많은 API가 이러한 방식으로 설계되었습니다
no=1 있는 경우 no=2를 찾아보세요
데이터베이스를 사용하지 않는데 왜 데이터가 사라지나요? list2 = list.subList(3,6); list3 = list.subList(6,9);
저장한 목록에 따르면
`
List<x> list1 = list.subList (0,3);
List
List
`
페이지 매겨진 목록의 데이터가 삭제될 때 정말 번거롭습니다...
고려해야 할 세 가지 솔루션이 있습니다.
데이터의 양이 적다면 페이지네이션을 하지 말고, 목록에 있는 모든 데이터를 한번에 클라이언트에 넘겨주세요
데이터의 양이 많아 페이지를 매겨야 하는 경우, 매번 얻어오는 페이지의 데이터를 전달하는 것뿐만 아니라, 해당 페이지의 데이터의 diff(변경 사항)를 전달하는 것도 고려할 수 있습니다.
데이터가 변경되면 데이터가 변경되었음을 나타내는 플래그를 클라이언트에 보내 클라이언트가 전체 목록을 새로 고치거나 사용자에게 전체 목록을 새로 고치라는 메시지를 표시할 수 있도록 합니다.
먼저 학생 컬렉션을 ID별로 정렬한 다음 이전 요청의 마지막 데이터의 ID와 크기를 페이징 요청의 입력 매개변수로 사용합니다. 여기서 ID는 Student.no입니다.
으아아아