主要内容:
1.第二轮迭代的进展
2.在客户端使用http与服务器通信
3.在客户端使用websocket与服务器通信
4.本地轻量级数据库——litepal
5.Android客户端使用广播传递消息
6.第二轮迭代总结
1.第二轮迭代进展
第一轮迭代结束时,我们掌握了在Android客户端使用websocket进行全双工通信,建立一个简单客户端和java服务器端(便于自己测试客户端).
第二轮迭代结束时,我们使用Material Design风格设计了消息界面,抽屉菜单栏,个人信息界面和聊天界面、注册登陆界面,剩下的未完成的界面只需要沿用这四个基础界面的设计风格,稍加修改就可以完成。在数据存储方面我们为客户端建立了本地数据库,在和服务器通信方面,我们增加了http进行登陆注册验证,在客户端功能实现方面,我们使用Android的service机制使得websocket连接得到长期保活,使用广播即时将websocket收到的聊天信息广播到其他位置,让控件得到响应。
2.使用http通信
我们选择http进行注册和登陆验证的优点在于http代价较小,而且不必要在用户未登陆的时候就和服务器建立websocket连接。
Android发送http请求有很多方式,在TalkTalk中我们使用Okhttp3进代替原生的httpURLConnection。
使用过程
1.添加Okhttp库依赖
在app:build.gradle文件中的dependencies下添加库依赖
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
2.建立处理http请求的类
处理发送post请求的函数
public static void postDataWithIdAndPsd(final String address,String userId,String password,final okhttp3.Callback callback){
OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。
FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
formBody.add("uid",userId);//传递键值对参数
formBody.add("password",password);
Request request = new Request.Builder()//创建Request 对象。
.url(address)
.post(formBody.build())//传递请求体
.build();
client.newCall(request).enqueue(callback);
}
主要就是 创建对象->填写表单->新建线程发送请求
3.处理结果
HttpUtil.postDataWithIdAndPsd(FakeDataUtil.LoginHttpAddress,account,password,new okhttp3.Callback(){
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseData=response.body().string();
try
{
JSONObject jsonObject=new JSONObject(responseData);
System.out.println("成功成功成功"+jsonObject.get("status").toString());
if(jsonObject.get("status").toString().equals("ok"))
{
runOnUiThread(new Runnable() {
@Override
public void run() {
//TODO 登陆成功
Intent intent=new Intent(LoginActivity.this,MessagesActivity.class);
startActivity(intent);
finish();
}
});
}
}catch (JSONException e)
{
//TODO JSON转换错误
}
}
@Override
public void onFailure(Call call,IOException e){
}
});
登陆处理示例,在onResponse中对收到的数据进行处理,使用runOnuiThread控制UI进程对控件或者界面进行操作。
2.使用数据库——Litepal
LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以不用写一行SQL语句就可以完成创建表、增删改查的操作。并且很轻量级,jar包不到100k,几乎零配置。
集成Litepal步骤
1.引入相应的类库
2.创建litepal.xml
3.更换继承的Aplication
1.引入类库
implementation 'org.litepal.android:core:1.3.2'
2.创建litepal.xml
在main目录下新建文件夹assets,在assets文件夹下建立litepal.xml文件
litepal>
<dbname value="TalkTalk" ></dbname>
<version value="1" ></version>
<list>
<mapping class="org.cheng.wsdemo.bean.UserInfo"></mapping>
....
</list>
</litepal>
其中重要的是version value是数据库本地版本信息,在数据库进行升级时只要增加版本号就可以同步之前的数据,避免数据丢失,在list标签下则是对象关系模型对应的对象地址
3.更换继承的类库
将对应的Model类继承改为DataSupport,即可方便地进行增删改查操作