基于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();
篇幅有限,内容还有很多,创作不易 … 祝愿您的生活永远灿烂如花 …