项目进度:
经过这两天,总算是把长连接做好了,客户端和服务端也能顺畅的进行交流了,总算是正式的视线了老师的创建课程,学生的添加课程,老师的删除课程和个人修改资料了。
目前在写的就是老师的删除学生和学生退出课程,数据库的操作已经完成和发送服务一起完成,现在主要就是考虑老师删除学生或者学生退出课程该怎么在课程管理界面顺带一起在页面上学生的名字。
同时课堂签到的数据库插入和向服务端发送消息的业务已经处理好,目前主要卡在了如何通知班级里的学生。之后大概会请求一下写QQ项目的同学,因为这个类似群聊的实现。
学习了ListView的双击点击事件:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
private int clickCount = 0;
private Handler handler = new Handler(); // 用于延迟清空点击计数器
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
clickCount++;
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (clickCount == 1) {
// 在这里添加处理单击事件的代码
} else if (clickCount == 2) {
// 处理双击事件
// 获取双击的列表项对应的课程数据
// 启动课程详情页面,并传递课程数据
Intent intent = new Intent(MainActivity.this, CourseDetailActivity.class);
//传递数据
startActivity(intent);
}
clickCount = 0; // 处理完成后清空点击计数器
}
}, 300); // 设置延迟时间,单位毫秒,可根据需要调整
}
});
2.修正了一些不安全的线程,比如使用HashMap改为使用CurrentHashMap,比如使用CopyOnWriteArrayList集合,而且这两个都是可序列化的,保证了线程安全,又能实现需要的功能点。由于项目中要多次使用,所以选择了使用泛型类:
public class CopyOnWriteArrayList<T> implements Serializable {
private static final long serialVersionUID = 123456789L;
private CopyOnWriteArrayList<T> copyOnWriteArrayList;
public CopyOnWriteArrayList(CopyOnWriteArrayList<T> copyOnWriteArrayList) {
this.copyOnWriteArrayList = copyOnWriteArrayList;
}
public CopyOnWriteArrayList<T> getCopyOnWriteArrayList() {
return copyOnWriteArrayList;
}
public void setCopyOnWriteArrayList(CopyOnWriteArrayList<T> copyOnWriteArrayList) {
this.copyOnWriteArrayList = copyOnWriteArrayList;
}
}
public class ConcurrentHashMap<T> implements Serializable {
private static final long serialVersionUID = 123456789L;
private CopyOnWriteArrayList<T> copyOnWriteArrayList;
public ConcurrentHashMap(CopyOnWriteArrayList<T> copyOnWriteArrayList) {
this.copyOnWriteArrayList = copyOnWriteArrayList;
}
public CopyOnWriteArrayList<T> getCopyOnWriteArrayList() {
return copyOnWriteArrayList;
}
public void setCopyOnWriteArrayList(CopyOnWriteArrayList<T> copyOnWriteArrayList) {
this.copyOnWriteArrayList = copyOnWriteArrayList;
}
}
3.写项目中遇到了几次的异常:
这个异常很常见的原因就是因为使用io流时的操作:规定就是一个new oos必须用一个new ois来接收,不然就会抛出这个异常,原因就是因为ois读入的时候有一个头部,导致ois读入的时候读取了头部,不能正确的接收到正确的对象。