实现一个类似QQ的社交聊天工具

今日科技快讯

日前,中国智能手机品牌vivo宣布,与国际足球联合会(FIFA)达成为期6年的FIFA世界杯全球赞助合作,贯穿两届比赛。这意味着vivo将连续成为2018年及2022年两届世界杯全球官方赞助商。届时,vivo标志将出现在FIFA世界杯比赛的场边广告牌、门票、新闻发布会背景板以及其他相关重要场合。vivo期望借助FIFA世界杯在全球的影响力,将品牌带到一个全新的高度。

作者简介

这周才上了三天班,突然发现明天就是周末啦,好开心有木有,提前祝大家周末愉快!

本篇来自 fitzeng 的投稿,分享了他开发一个聊天工具的历程,希望大家喜欢!

fitzeng 的博客地址:

http://fitzeng.org

Part One
  • 效果图

*由于大小限制,这里的图片我做了压缩,大图可点击最后 阅读原文 查看

  • 原因

由于在间间断断的学Android,所以学的知识比较杂,想做个小项目来复习复习。所以之前在课后十天左右的时间完成了一个刚刚具备聊天功能的App,由于这几天拼命的搜寻资料,发现网上并没有一个完整的开发过程的文章。平时也就是看看大牛们的博客学习,现在觉得也要多和大家分享自己学到的知识,共同进步。可能你在这学不到技术深度的东西,但是说不定可以扩展你的技术广度。

  • 目标人群

推荐给正处于Android进阶的人群,想写一个App却不知道如何开始。希望我的这些文字对你能有帮助。最少基本过了一遍《第一行代码》,读过《Android群英传》就更好了。由于我是以一个遇到问题解决问题的视角来写的,所以基本会让你的开发过程思路清晰,知道这么做的目的和好处。同时这也是一个开始完全不知道怎么写到实现基本功能的心路历程描述。所以应该会有点价值吧。当然涉及的东西确实有点多,所以不可能一一叙述,欢迎大家留言讨论。

  • 知识

数据库相关知识(基本的增删改查)

Java(Java可视化界面编程,Socket网络通信)

Android

  • 软件

Android: Android Studio

本地服务器搭建: XAMPP(Apache + MySQL)

服务器界面:Eclipse JavaEE

  • 实现思路

在电脑上利用 Apache + MySQL 搭建一个供服务端访问的数据库,有了数据库,就要写一个服务端在电脑上运行,读写数据库数据。开启一个线程一直检测是否有客户发送连接请求,有的话 accept,并且给这个连接的用户开一个单独线程供客户端进行通讯。而客户端发送请求给服务器,所以客户端要有一个 Action 来激活发送请求,也就是我们的点击滑动等事件。但是同时又要接受来自服务端的数据,所以我们要使客户端的 Action 操作和与服务端通讯分别用两个不同的线程管理。不知道我讲没讲请,下面用图来描述一下。

Part Two

实现目标

按照最先开始的计划,我们只实现一个静态的 ZZChat 界面,考验的就是 Android 控件的基本知识。如果碰到没见到过的控件可以去 Google 看开发文档。

实现过程

在看到实现的设计下,我们最先想到的是有四的Activity(欢迎界面,引导页,登录注册,主界面),同时对应四个布局

  • 修改MANIFEST

欢迎界面

引导界面只在首次开启时显示

引导页

引导页我们使用一个ViewPager实现,如果之前不熟悉的可以看我的另一个

利用ViewPager做的轮播图

http://fitzeng.org/2017/04/07/SlideShow

  • 布局

相信看了前面动图的效果对布局实现应该是有底了

  • 适配布局

到这了,如何实现 ViewPager 加载布局就是我们现在应该想的事了。

目前可以最先想到和做到的是实现三个加载的布局,为了方便我们只使用一个 ImageView来实现,同理其他三个页面也是类似,第三个多加一个 Enter 入口进入主页。

  • 适配器

现在的情况是有了布局和资源页面,怎么把资源页面加载进布局,这时就要用到 Adapter 了,也就是适配器。新建一个 adapter 资源包,新建一个 AdapterGuideViewPager类 继承 PagerAdapter

一定要注意 getCount() 和 isViewFromObject() 函数的实现。

有了适配器,只要给 adapter 添加之前的 guide 视图作为资源,再给 viewPager 设置资源适配器。基本效果就实现了。

  • 指示器实现

当前页面是第几页,要给用户一个比较明显的提示,可以利用两个不同颜色的小圆点。但是要想知道移动的改变就要实现监听事件。实现 onPageSelected() 方法就可以了。

登陆注册

  • 界面

这里可以自己设计,我使用 TabHost 实现,学习使用不同控件,不过布局值得主页的是ID的设置,自己可以试试如果不这样会出现什么效果。

  • 跳转

目前还没进行数据处理,所以我们直接跳转进入界面

  • 添加依赖库

如果你遇到上面的bug,说明到现在我们的TabHost是无法工作的,因为缺少一个依赖库。

compile ‘com.android.support:design:2x.x.x’

添加方式是在File->Project Structure 在弹出的窗口中选择app,之后操作看图:

此时需要重新 Gradle, 这时可能一个错误在 build.gradle。按 Alt + Enter, 选择忽略就好。

主界面

之前的页面基本实现,那么主界面如何实现,参考QQ,为了避免控件上的使用难度,我们直接用google提供的 DrawerLayout

写代码之前先理清思路,这个主界面明显是包含三个页面加一个侧换页面,也就是四个。
新建一个view资源文件,创建四个视图类。接着新建四个布局供类加载

  • 布局

这个布局有要主页的地方。侧滑视图要设置android:layout_gravity=”start” 属性。DrawerLayout 最好为根容器,推荐如下布局:

最外层就是 DrawerLayout,中间只有一个主内容和一个侧滑布局。你要添加的内容全部在主内容中实现。

这里采用 ViewPager + TabLayout 来实现,不熟悉的看这里:

http://fitzeng.org/2017/04/07/TabLayout

  • 加载页面

以 Chats 为例:

十分简单,看代码就能懂

之前已经使用了侧滑视图,接下来的三个视图分别对应加载进了三个类。如何将这些视图加载进主界面,前面已经说过如何加载 viewPager 了,这里也是一样的。实现一个适配器。

到这里基本的效果实现了,不清楚了可以参考阶段性源码。

最后

由于篇幅限制,这里只发布了前两部分(之后还有重要的网络部分),完整的项目笔记,大家可以点击最后 阅读原文 或者 访问作者的博客地址查看。

github地址:

https://github.com/mk43/ZZChat

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序目录以及简介: 压缩包解压后有两个目录为Service以及Client,Service为服务端源代码,Client为客户端源代码。本程序的编写语言为C#,C#其作为一个热门及优秀的程序语言来说,编写ASP.NET以及WINFORM都很不错!本程序即为一个典型的WINFORM通讯程序。 在Internet高速发展的今天,通讯变的尤为重要,从国内的QQ到微软的MSN,都可以看出,人与人之间的交流需求越来越大。本程序即基于SOCKET模型来实现通讯,其实现一个作为聊天软件来说的一些基本功能,即为注册、登入、加好友然后发送自己的消息。 技术详解: 本程序使用C#语言编写,其基与.NET。 程序分两部分,即为服务端与客户端,都使用SOCKET模型实现数据传输通讯,数据库为微软MSSQL。程序的连接协议都使用TCP,TCP其具有的稳定性、安全性,更是其作为聊天软件数据协议的重要条件!但是TCP的沾包,无边界等,是一个很典型的问题,本程序及很好的解决了该问题,通过将数据规范的存放在XML中,然后将其发出,接收方可以很好的判断XML是否完整,以此来决定是否完整的接收了数据。 服务端负责监听接入的连接以及数据,通过将接收到的数据根据需要,进行少量处理,然后转发到客户端,已达到数据转发的功能,即为:客户端1 --------服务端-------客户端2,因为协议使用的是TCP,所以只需要将服务端暴露在公网的环境下,客户端及可以正常的穿透路由器进行连接以及数据之间的传输。对于不在线的用户,又需要将数据发送给该用户,本程序使用的方法是将需要发送的数据存放于数据库当中,当该用户登入以后,及将数据发送给其。 客户端则负责与服务端连接,维护、处理用户的数据以及操作。将接收到的数据反馈给用户,以及将用户的数据发送给服务端,以便服务端处理之后再转发到接收方,以此来达到用户与用户之间的交流通讯。客户端以实现作为一个聊天软件的最基本的功能,用户可以修改一些个人资料以及头像。 不足以及待改进的地方: 因为本人时间不足以及本程序作为一个实验性作品,功能以及各种方面有不少缺陷,比如安全性、个人资料缺少,以及聊天只能输入文字的单调性,数据协议的构架合理性,都缺少更多的考虑以及可行性,本程序作为一个可正式使用的程度还有一定的距离。 注意:本程序部分图片素材取自MyQQ项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值