安卓android+WebSocket实现简易QQ聊天室

本文详细介绍了一个基于安卓平台的聊天室前端开发过程,包括界面设计、代码实现及与后端springboot框架的websocket交互。从登录界面到聊天界面,展示了如何通过Intellij IDEA和相关依赖库完成项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇仅介绍实现聊天室的前端,也就是安卓端代码,后端的实现看链接说明

链接说明

1.后端使用了spring boot 框架,若不熟悉,有关spring boot 入门教程请戳此链接使用Intellij IDEA开发第一个spring boot项目
2.websocket后端实现细节戳此链接spring boot练习–利用websocket实现QQ聊天室

界面展示

说明

有两个界面,第一个是登陆界面,我借用了我之前实现的登陆界面,并做了一些微调。需要输入ID和名字,测试的时候输入的ID不能重复,第二个是名字用于界面展示,登陆后跳转入第二个界面,就可以在聊天室里聊天了。

下面图模拟了一组场景,大青儿先进入聊天室,然后小明进入,互相发一段消息后,小明退出聊天室。

大青儿界面变化

在这里插入图片描述

小明界面变化

在这里插入图片描述

代码部分

这里仅展示安卓的代码,后端代码详见上面链接说明。

文件的简单介绍

Activity文件:LoginActivity.java,ChatActivity.java,与其对应布局文件activity_login.xml,activity_chat.xml
模型文件:Msg.java,User.java
适配器:UserAdapter
子布局文件:user_item.xml

第一步修改.gradle文件,添加以下内容
    implementation 'com.squareup.okhttp3:okhttp:3.8.1'
    implementation 'com.squareup.okhttp3:mockwebserver:3.8.1'

    implementation 'com.alibaba:fastjson:1.2.10'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
第二步,修改AndroidManifest.xml文件,添加以下内容
 <activity android:name=".ChatActivity">
 </activity>
 <activity android:name=".LoginActivity">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />

         <category android:name="android.intent.category.LAUNCHER"/>
     </intent-filter>
 </activity>
以及添加这行,注意添加的位置的区别
<uses-permission android:name="android.permission.INTERNET" />
第三步具体功能代码
LoginActivity.java
public class LoginActivity extends Activity {
   
    private EditText mEditTextName,mEditTextId;
    private Button mButtonLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        init();

        mButtonLogin.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                String userName = mEditTextName.getText().toString();
                String userId = mEditTextId.getText().toString();
                User user = new User(userId,userName);
                Intent intent = ChatActivity.newIntent(LoginActivity.this,user.toString());
                startActivity(intent);
                LoginActivity.this.finish();
            }
        });
    }

    private void init(){
   
        mEditTextName = findViewById(R.id.nickname_editText);
        mEditTextId = findViewById(R.id.id_editText);
        mEditTextName.setCompoundDrawables(initDrawable(R.drawable.nickname),null,null,null);
        mEditTextId.setCompoundDrawables(initDrawable(R.drawable.id),null,null,null);
        mButtonLogin = findViewById(R.id.login);
    }

    /**
     * 设置EditText左边图片的大小
     * */
    private Drawable initDrawable(int res){
   
        Drawable drawable = getResources().getDrawable(res);
        //距离左边距离,距离上边距离,长,宽
        drawable.setBounds(0,0,100,100);
        return drawable;
    }
}
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background">

    <!--    https://www.runoob.com/w3cnote/android-tutorial-relativelayout.html-->

    <RelativeLayout
        android:id="@+id/viewTop"
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:background="@color/mihuang">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:src="@drawable/boy" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/viewCenter"
        android:paddingTop="20dp"
        android:layout_centerHorizontal="true"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/viewTop"
        android:paddingBottom="70dp">

        <EditText
            android:id="@+id/id_editText"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:drawablePadding="10dp"
            android:drawableLeft="@drawable/id"
            android:hint="请输入Id"
            android:textSize="16sp"
            android:layout_marginLeft="10dp"/>

        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/down"
            android:paddingRight="10dp"
            android:paddingTop="20dp"/>

        <EditText
            android:layout_below="@+id/id_editText"
            android:id="@+id/nickname_editText"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:drawablePadding="10dp"
            android:drawableLeft="@drawable/nickname"
      
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大青儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值