主要内容:
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,即可方便地进行增删改查操作