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

现有学生实体类 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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(5)
伊谢尔伦

Adakah anda belum membuat halaman mudah alih lagi? ? Apabila paging mudah alih melibatkan penukaran data, ia mestilah tidak berdasarkan page=1, jika tidak, ia akan diulang atau terlepas (Tidak mengapa untuk terlepas, anda akan menemuinya selepas mengulanginya pada klien)
Penyelesaian umum ialah. seperti berikut :
Pertama sekali, anda mesti mempunyai pengisihan, seperti mengikut masa, markah, dsb. Jika pelanggan ingin pergi ke halaman seterusnya, ia hanya perlu lulus pengecam rekod terakhir semasa halaman. Pelayan akan mendapatkan pengecam ini, kemudian cari data berikut dan berikannya.
Contoh:
Anggapkan bahawa data pelayan ialah 1,2,3,4,5,6,7,8 dan data yang dikembalikan kepada klien ialah 1,2,3 Pada masa ini, data selepas 3 diperlukan, jadi 3 Hantar semula ke pelayan, pelayan mendapat 3 dan kemudian mengikut logik yang dipersetujui, ia mendapati 4, 5, 6 yang lebih besar daripada 3 dan memberikannya kepada klien, supaya tidak ada masalah duplikasi walaupun ditambah atau dipadam
Beginilah cara kami memaparkan gambar aliran air terjun Ya, tambahan pula, banyak API FB dan Instagram direka dengan cara ini

洪涛

no=1 Jika anda memilikinya, cari no=2

迷茫

Anda tidak menggunakan pangkalan data, jadi bagaimana data itu hilang
Adakah paging boleh dilakukan mengikut senarai yang anda simpan sama dengan kod pseudo berikut:
`
Senarai<x> list1 = list.subList (0,3);
List<x> list2 = list.subList(3,6);
List<x> list.subList(6,9);
`

阿神

Memang menyusahkan apabila data dalam senarai bernombor dipadamkan...

Terdapat 3 penyelesaian untuk dipertimbangkan:

  1. Jika jumlah data adalah kecil, jangan lakukan paging, cuma berikan semua data dalam senarai kepada klien sekaligus

  2. Jika jumlah data adalah besar dan mesti dinomborkan, anda boleh mempertimbangkan bukan sahaja untuk menghantar data halaman yang akan diperolehi setiap kali, tetapi juga melepasi perbezaan (perubahan) data halaman yang telah diperoleh sebelum ini kepada pelanggan

  3. Jika data berubah, hantar bendera yang menunjukkan bahawa data telah bertukar kepada klien, membenarkan klien memuat semula keseluruhan senarai atau menggesa pengguna memuat semula keseluruhan senarai.

伊谢尔伦

Mula-mula isikan koleksi pelajar mengikut id, kemudian gunakan id dan saiz data terakhir dalam permintaan sebelumnya sebagai parameter input permintaan untuk paging Id di sini ialah Student.no.

for(Student student:students){
  if(student.no>lastId){
      result.add(student);
      if(result.size()==size){
          return result;
      }
  }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan