点赞之后到底应该怎么处理,这个问题最近这个问题一直困扰着我。
下面是询问众多人之后:
1.点击之后向服务器发起请求,然后等待数据返回,根据返回的数据单条刷新(单条刷新这个问题我前面已经解决了)。
2.本地直接改变点赞状态和数量然后再向服务器发起请求,成功之后再进行带条数据刷新(如果是只能点赞不能取消这里
都可以省略了)。
可是这两条还是无法满足我要点击,要连续点击 点赞 - 取消 - 点赞 - 取消.... 这一系列操作。
当我今天忽然看见QQ空间和掌盟的点赞机制后,突然更加坚信了我的点赞逻辑 —— 点赞是在本地直接处理的。
( QQ空间和掌盟的点赞机制:点击之后毫无延迟,直接变化,掌盟可以连续 点赞 - 取消 - 点赞 - 取消。最最关键的一点,
没有网络的情况下也是同样如此。)
下面是我自己的点赞逻辑:
/// 点赞逻辑 // 点击 -> 改变 ( 图片显示改变 + 数量改变 )-> 向后台发起数据请求 图片显示改变: 根据当前的状态做出相反的改变 点赞数量改变: 根据当前显示的数量和状态进行相应的改变 获取当前状态: 无论是获取此条数据的状态还是后台重新获取单条数据刷新 在可以 点赞 又可以 取消的情况下 是无法获取此时准确的状态 所以只能从当前显示点赞图片的显示来判断点击时是什么状态 获取显示数量: 直接从显示赞数量的TextView获取
// 获取点赞数量 int sum = Integer.parseInt(holder.likesSum.getText().toString()); // 定义点赞状态 0 未点赞 1 已点赞 int status; // 判断此时显示的状态 if (holder.like.getDrawable() == isSupport) { //如果是点赞状态下 数量直接-- sum--; // 状态为1 status = 1; // 点击之后更改相反的显示图片 holder.like.setImageDrawable(noSupport); } else { // 如果是为未点赞状态 得先判断点赞数量是否为0 if (sum == 0) sum = 1; // 为0 则等于 1 ( 0 无法 ++ ) else sum++; // 不为零则直接 ++ // 此时点赞状态为未点赞 status = 0; // 点击之后更改成已点赞 holder.like.setImageDrawable(isSupport); } // 更新点赞数量 holder.likesSum.setText(sum + ""); // 向服务器发起请求 -- 此时无论怎么点多少次,提交的status都是当前用户的选择 submitSupport(data.getId(), status);无论用户点击多少次,请求每次反正都会发送,而最后一次点击请求的点赞状态就是当前用户选择的。
写到这里,更可以在请求之前延迟两秒,如果用户两秒之内没有点击则进行请求。
在点击之前也可以进行有无网络的判断。(这个无网络点击之后应该是在本地保存有网络了继续发送请求吧。
就像QQ空间无网络发布动态一样)。