当前位置: 首页 > news >正文

基于android的即时通讯APP 聊天APP

基于android的即时通讯APP 或者 聊天APP

一 项目概述

该项目是基于Android 的聊天APP系统,该APP包含前台,后台管理系统,前台包含用户通讯录,用户详情,用户聊天服务,用户二维码,发现功能,发现详情 , 个人中心, 个人信息, 编辑信息,上传头像,注册,登录,退出 等操作 。后台包含 系统管理,用户管理,聊天内容管理,聊天人员管理,发现管理 等功能, 东西非常多, 非常值得大家的学习和研究.

二 项目功能结构图

在这里插入图片描述

三 开发技术和工具

项目采用android原生写法
使用websocket技术
数据库使用mysql存储

开发工具:
推荐android studio
推荐idea
推荐逍遥模拟器

四 开发功能实现

登录功能
在这里插入图片描述
注册功能

在这里插入图片描述
用户通讯录
在这里插入图片描述
功能实现:

package com.itfxq.ui.adapter;import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.itfxq.R;
import com.itfxq.model.entity.UserEntity;
import com.itfxq.ui.activity.UserDetailActivity;import java.util.List;/*** 描述: UserAdapter * 开发工程师: Marker* 联系方式: QQ 624029037*/
public class UserAdapter extends ArrayAdapter<UserEntity> {//资源idprivate int resourceId;private List<UserEntity> mUserEntityList;// 适配器的构造函数,把要适配的数据传入这里public UserAdapter(Context context, int textViewResourceId, List<UserEntity> objects){super(context,textViewResourceId,objects);resourceId=textViewResourceId;mUserEntityList = objects;}// convertView 参数用于将之前加载好的布局进行缓存@Overridepublic View getView(int position, View convertView, ViewGroup parent){UserEntity userEntity=getItem(position); //获取当前项的Words实例// 加个判断,以免ListView每次滚动时都要重新加载布局,以提高运行效率View view;ViewHolder viewHolder;if (convertView==null){// 避免ListView每次滚动时都要重新加载布局,以提高运行效率view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false);// 避免每次调用getView()时都要重新获取控件实例viewHolder=new ViewHolder();viewHolder.user_imageIv=view.findViewById(R.id.user_imageIv);viewHolder.user_nameTv=view.findViewById(R.id.user_nameTv);viewHolder.user_nameTv.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View view) {Intent intent = new Intent(getContext(),UserDetailActivity.class);intent.putExtra("userEntity", userEntity);getContext().startActivity(intent);}});viewHolder.user_imageIv.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View view) {Intent intent = new Intent(getContext(),UserDetailActivity.class);intent.putExtra("userEntity", userEntity);getContext().startActivity(intent);}});view.setTag(viewHolder);} else{view=convertView;viewHolder=(ViewHolder) view.getTag();}viewHolder.user_nameTv.setText(userEntity.getUsername());Glide.with(getContext()).load(userEntity.getHeadImg()).into(viewHolder.user_imageIv);return view;}// 定义一个内部类,用于对控件的实例进行缓存class ViewHolder{ImageView user_imageIv;TextView user_nameTv;}
}

聊天功能界面

在这里插入图片描述
功能实现:

 implementation 'org.java-websocket:Java-WebSocket:1.3.0'

后台idea里面websocket在maven中配置

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

后台websocket配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {@Overridepublic void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {stompEndpointRegistry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {registry.enableSimpleBroker("/topic","/user");registry.setApplicationDestinationPrefixes("/app/");registry.setUserDestinationPrefix("/user/");}
}

通过 messagingTemplate.convertAndSendToUser(toUserMessage.getUserId(),“/message”,toUserMessage.getMessage());响应信息到客户端

客户端连接代码

  client = Stomp.over(WebSocket.class, "ws://"+ Constants.IPPORT +"/hello/websocket");client .connect();

篇幅有限,内容还有很多,创作不易 … 祝愿您的生活永远灿烂如花 …

http://www.lryc.cn/news/6033.html

相关文章:

  • 【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历
  • MySQL数据库调优————SQL性能分析
  • sql数据库高级编程总结(一)
  • 软件工程(5)--喷泉模型
  • SM2数字签名
  • RPA+保险后台部门擦出不一样“火花” | RPA案例
  • 设备树相关概念的理解
  • ubuntu20.04下配置深度学习环境GPU
  • 用egg.js来写一个api管理系统(一)
  • 企业数字化转型和升级:架构设计方法与实践
  • 【LeetCode】环形链表 II [M](链表)
  • Unity之如何实现一个VR任务(剧情)系统
  • k8s核心概念与kubectl命令行工具的使用
  • 【零基础入门前端系列】—无序列表、有序列表、定义列表(四)
  • 为什么重写equals还要重写hashcode方法
  • 电子技术——电流镜负载的差分放大器
  • go面试题
  • 攻防世界-Confusion1
  • 机器学习实战--梯度下降法进行波士顿房价预测
  • 黑马】后台管理-项目优化和上线
  • Web 框架 Flask 快速入门(三)数据库-MySQL
  • 牛客网Python篇数据分析习题(六)
  • Ansible的安装及部署
  • 链表题目总结 -- 递归
  • 重写-linux内存管理-伙伴分配器(一)
  • 为什么要用springboot进行开发呢?
  • 设备树信息解析相关函数
  • LeetCode-1124. 表现良好的最长时间段【哈希表,前缀和,单调栈】
  • vue-router路由配置
  • 中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗