第二次迭代—龙峥嵘

主要内容:

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

猜你喜欢

转载自www.cnblogs.com/moonstars2333/p/11999938.html
今日推荐