返回顶部
首页 > 资讯 > 移动开发 >Android Studio和阿里云数据库实现一个远程聊天程序
  • 257
分享到

Android Studio和阿里云数据库实现一个远程聊天程序

2024-04-02 19:04:59 257人浏览 薄情痞子
摘要

没有阿里云数据库的可以买个最便宜的,我是新用户9.9元买了一个 1.买到后点击左上角的工作台 2. 3.  4.  5. 6. 7. 8. 9.

没有阿里云数据库的可以买个最便宜的,我是新用户9.9元买了一个

1.买到后点击左上角的工作台

2.

3.

 4.

 5.

6.

7.

8.

9.

10.

11.

12.

13.

开始写Android Studio项目代码了,先来看看我的项目结构

依赖包下载地址 Central Repository: Mysql/mysql-connector-java (Maven.org)

我第一次下了个版本比较新的发现会报错,由于我能力有限,所以就老实下载一个低版本的

添加依赖包应该都会了吧,不要忘了添加后还要添加到模块

MainActivity代码如下

注意代码里涉及sql语句,这里要根据你之前新建的数据库和新建的表来写,我新建的表是test


import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
import androidx.appcompat.app.AppCompatActivity;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class MainActivity extends AppCompatActivity {
    private TextView t1;  //用于显示获取的信息
    private Button sendmsg;  //发送消息按钮
    private EditText et_msg;//用户输入信息框
    private String user="user"; //默认用户昵称
    private boolean T=false;//发送标志位
    //数据库连接类对象
    private static Connection con = null;
    private static PreparedStatement stmt = null;
    private Button revise;
    private EditText et_revise;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        t1 = findViewById(R.id.t1);
        et_msg = findViewById(R.id.msg);
        et_revise = findViewById(R.id.reviseText);
        sendmsg = findViewById(R.id.button);
        revise = findViewById(R.id.revise);
        revise.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                user = et_revise.getText().toString();
                Toast.makeText(MainActivity.this,"修改成功",Toast.LENGTH_SHORT).show();
            }
        });
        sendmsg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { T=true; }
        });
        //TODO 启动发送线程,用按钮控制发送标志位T,来进行发送信息【注意:连接数据库必须在线程内,不然会报错】
        Threads_sendmsg threads_sendmsg = new Threads_sendmsg();
        threads_sendmsg.start();
        //TODO 启动获取数据线程,读取数据库里的信息【注意:连接数据库必须在线程内,不然会报错】
        Threads_readSQL threads_readSQL = new Threads_readSQL();
        threads_readSQL.start();
 
    }
 
    class Threads_sendmsg extends Thread {
 
        @Override
        public void run() {
            while (true){
                while (T){
                    try {
                        con = MySQLConnections.getConnection();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    try {
                             //注意你数据库中是否有 test 这个表,我新建的表是 test
                            //还有我的属性,是否和我一样呢,不一样就按你自己的来吧
                        String msg =et_msg.getText().toString().trim(); //用户发送的信息
 
                        if (msg.isEmpty()){
 
                            Looper.prepare();
                            Toast.makeText(MainActivity.this, "消息为空", Toast.LENGTH_SHORT).show();
                            Looper.loop();
                            T=false;
                            break;
                        }
                        if (msg.length()>199){
                            Looper.prepare();
                            Toast.makeText(MainActivity.this, "消息长度超过限制", Toast.LENGTH_SHORT).show();
                            Looper.loop();
                            T=false;
                            break;
                        }
 
                        if (con!=null) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "发送成功", Toast.LENGTH_SHORT).show();
                                }
                            });
                            String sql = "insert into test(name,msg,sign)  values(?,?,?)";
                            stmt = con.prepareStatement(sql);
                            // 关闭事务自动提交 ,这一行必须加上
                            con.setAutoCommit(false);
                            stmt.setString(1,user);
                            stmt.setString(2,msg);
                            stmt.setInt(3,1);
                            stmt.addBatch();
                            stmt.executeBatch();
                            con.commit();
                        }
                    }catch (SQLException e){
                        System.out.println(e);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this,"请输入正确的语句",Toast.LENGTH_SHORT).show();
                            }
                        });
 
                    }
                    T=false;
                }
            }
        }
    }
    class Threads_readSQL extends Thread {
 
        ResultSet rs;
 
 
        @Override
        public void run() {
            while (true) {
                try {
                    con = MySQLConnections.getConnection();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                            //注意你数据库中是否有 test 这个表,我新建的表是 test
                            //还有我的属性,是否和我一样呢,不一样就按你自己的来吧
                    String sql = "select name,msg,sign from test";
                    if (con != null) {
                        stmt = con.prepareStatement(sql);
                        // 关闭事务自动提交
                        con.setAutoCommit(false);
                        rs = stmt.executeQuery();//创建数据对象
                        //清空上次发送的信息
                        t1.setText(null);
                        while (rs.next() ) {
                            t1.append(rs.getString(1) + "\n" + rs.getString(2) + "\n\n");
                        }
                        con.commit();
                        rs.close();
                        stmt.close();
                    }
                    //2秒更新一次
                    sleep(2000);
                } catch (Exception e) {
                    System.out.println(e);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            //Toast.makeText(MainActivity.this,"请输入正确的语句",Toast.LENGTH_SHORT).show();
                        }
                    });
                } 
            }
        } 
    } 
}

MainActivity布局文件activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
 
    // An highlighted block
    <TextView
        android:id="@+id/t1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10"
        android:text="Hello World!"
        android:layout_marginLeft="8dp"
         />
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
 
            <EditText
                android:id="@+id/reviseText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:hint="请输入你的昵称"
                android:inputType="textPersonName" />
 
            <Button
                android:id="@+id/revise"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="修改" />
 
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
 
            <EditText
                android:id="@+id/msg"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:ems="10"
                android:hint="请输入内容"
                android:inputType="textPersonName" />
 
            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="发送" />
 
        </LinearLayout>
 
    </LinearLayout>
 
</LinearLayout>

MYSQLConnections代码如下

注意我写的注释,用户名,密码,外网地址,外网端口号,数据库名称,这些都要填写你自己的


import java.sql.Connection;
import java.sql.DriverManager;
 
public class MySQLConnections {
    private String driver = "";
    private String dbURL = "";
    private String user = "";
    private String passWord = "";
    private static MySQLConnections connection = null;
    private MySQLConnections() throws Exception {
        driver = "com.mysql.jdbc.Driver"; //这里根据你下载的依赖包版本会有不同的写法,下载低版本的就是这样写
        //rm-bp1lxt0mjpf6o.mysql.rds.aliyuncs.com:3306 这个是外网地址,3306是外网端口号,这些都需要填写你自己的
        //sqlconsole 这个是你登录你的数据库后新建的数据库(应该不绕口吧)
        dbURL = "jdbc:mysql://rm-bp1lxt0m.mysql.rds.aliyuncs.com:3306/sqlconsole";
        user = "user";  //你新建库时的用户名
        password = "123456"; //你新建库时的密码,这里我就不写我的真密码了
        System.out.println("dbURL:" + dbURL);
    }
    public static Connection getConnection() {
        Connection conn = null;
        if (connection == null) {
            try {
                connection = new MySQLConnections();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        try {
            Class.forName(connection.driver);
            conn = DriverManager.getConnection(connection.dbURL,
                    connection.user, connection.password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}

AndroidManifest.xml

注意这里要添加网络请求权限


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mysqlconnections">
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 
    <application
        android:usesCleartextTraffic="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication1">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <cateGory android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

最后看我运行结果

参考博客

Android Studio 连接阿里云数据库【制作基于数据库的多人远程聊天APP】

到此这篇关于Android Studio和阿里云数据库实现一个远程聊天程序的文章就介绍到这了,更多相关Android Studio阿里云远程聊天内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android Studio和阿里云数据库实现一个远程聊天程序

本文链接: https://lsjlt.com/news/156858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android Studio和阿里云数据库实现一个远程聊天程序
    没有阿里云数据库的可以买个最便宜的,我是新用户9.9元买了一个 1.买到后点击左上角的工作台 2. 3.  4.  5. 6. 7. 8. 9. ...
    99+
    2024-04-02
  • 怎么在android中利用Socket实现一个聊天小程序
    本篇文章为大家展示了怎么在android中利用Socket实现一个聊天小程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下服务器端:package org.hwq.echo; impo...
    99+
    2023-05-31
    android socket roi
  • Android远程访问阿里云数据库实现实时、高效的数据传输
    随着移动互联网的发展,越来越多的开发者开始将数据存储在云端。而阿里云作为国内最大的云计算服务提供商,其数据库服务深受开发者们的青睐。本文将详细介绍如何使用Android远程访问阿里云数据库,实现实时、高效的数据传输。 一、准备工作首先,你需...
    99+
    2023-12-10
    高效 阿里 数据传输
  • 如何利用C++实现一个简单的聊天室程序?
    如何利用C++实现一个简单的聊天室程序?在信息时代,人们越来越注重网络交流。而聊天室作为一种常见的沟通工具,具有实时性和交互性的特点,被广泛应用于各个领域。本文将介绍如何利用C++语言实现一个简单的聊天室程序。首先,我们需要建立一个基于客户...
    99+
    2023-11-04
    C++ 实现 聊天室程序
  • 阿里云远程数据库实现数据共享与远程访问的新方式
    阿里云远程数据库是一种创新的技术,它通过将数据库服务迁移到云端,为用户提供了一个便捷、高效的数据存储和访问解决方案。本文将介绍阿里云远程数据库的基本概念、功能特点以及使用场景,并通过实际案例来展示其在企业中的应用。1. 数据存储与访问的革...
    99+
    2023-12-30
    阿里 远程访问 方式
  • 阿里云远程访问数据库实现便捷高效的远程数据管理
    在信息化的今天,数据已经成为企业的核心资源。为了更好地管理和利用这些数据,许多企业选择使用数据库系统。然而,随着企业的快速发展,传统的数据库管理方式已经无法满足企业的需求。这时,阿里云远程访问数据库的出现,为企业提供了全新的解决方案。阿里云...
    99+
    2023-11-12
    高效 阿里 数据管理
  • 程序怎么连阿里云数据库的
    1. 了解阿里云数据库 在开始连接阿里云数据库之前,我们需要先了解一下阿里云数据库的基本概念和特点。阿里云数据库是一种高可用、高性能、高安全的云数据库服务,支持多种数据类型和存储引擎,包括关系型数据库、NoSQL数据库等。阿里云数据库提供了...
    99+
    2024-01-20
    阿里 数据库 程序
  • 阿里云数据库小程序怎么用
    简介 阿里云数据库是一款强大的云计算服务,提供了稳定可靠、高性能的数据库解决方案。而小程序是一种轻量级的应用程序,可以快速开发和部署,适合于各种场景下的应用需求。本文将介绍如何使用阿里云数据库来开发小程序。详细说明步骤一:创建数据库实例首先...
    99+
    2023-12-31
    阿里 数据库 程序
  • Nodejs中怎么实现一个TCP服务端与客户端聊天程序
    今天就跟大家聊聊有关Nodejs中怎么实现一个TCP服务端与客户端聊天程序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。服务器端count:连接的客...
    99+
    2024-04-02
  • 远程连接阿里云的mysql数据库
    第一步 由于mysql版本问题 先尝试打开 sudo vim /etc/mysql/my.cnf 如空,再尝试打开 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 号 注释该行 bind-add...
    99+
    2023-01-30
    阿里 数据库 mysql
  • 阿里云远程登录数据库错误
    简介 在使用阿里云服务器进行数据库管理时,有时候会遇到无法远程登录数据库的问题。本文将介绍一些常见的原因和解决方法,帮助您快速解决阿里云远程登录数据库错误。解决方法1. 检查网络连接首先,您需要确保您的本地网络连接正常。可以通过访问其他网站...
    99+
    2023-12-29
    阿里 错误 数据库
  • 阿里云数据库教程全面了解和使用阿里云数据库
    阿里云数据库是阿里云提供的数据库服务,可以帮助用户更高效地管理数据,提高数据处理能力。本文将详细介绍阿里云数据库的基本概念、使用方法、常见问题及其解决方法,希望能帮助用户更好地了解和使用阿里云数据库。 一、阿里云数据库的基本概念阿里云数据库...
    99+
    2023-10-29
    阿里 数据库 教程
  • 阿里云上的mysql远程连接数据库
    在当今数字化时代,数据库是所有数据存储和管理的核心。阿里云是全球领先的云计算服务提供商之一,提供了多种数据库解决方案,其中最知名的就是MySQL数据库。MySQL是一个功能强大、稳定可靠的关系型数据库管理系统,被广泛应用于各种互联网应用中。...
    99+
    2024-01-25
    阿里 连接数据库 mysql
  • 阿里云sql数据库没法远程访问
    1. 简介 阿里云SQL数据库是一种基于云计算的数据库服务,提供了高可用性、高性能和安全性的数据存储和管理功能。然而,有时候用户可能会遇到无法远程访问阿里云SQL数据库的问题,这给用户的工作和业务带来了困扰。本文将探讨阿里云SQL数据库无法...
    99+
    2024-01-19
    阿里 远程访问 数据库
  • 如何远程访问阿里云mysql数据库
    简介 在现代互联网应用中,数据的安全和可靠存储变得越来越重要。阿里云MySQL是一种稳定可靠的数据库解决方案,可以满足各种规模的企业和个人需求。然而,对于那些不在本地服务器上的用户来说,如何远程访问阿里云MySQL数据库是一个常见的问题。本...
    99+
    2024-01-21
    阿里 远程访问 数据库
  • 阿里云2008r2数据库允许远程连接
    简介 在使用阿里云2008r2数据库时,我们可能需要通过远程连接的方式进行管理和操作。但是,对于初次接触的人来说,可能会有些困惑,不知道如何进行远程连接。本文将详细介绍阿里云2008r2数据库允许远程连接的方法和步骤。远程连接方法设置防火墙...
    99+
    2024-01-22
    阿里 数据库
  • 阿里云允许远程数据库连接吗
    简介 在当今数字化时代,远程数据库连接成为许多企业和个人的日常需求。阿里云作为一家领先的云计算服务提供商,其强大的数据库解决方案备受关注。那么,阿里云是否允许用户通过远程连接来访问和管理数据库呢?本文将对这个问题进行详细说明。远程数据库连接...
    99+
    2023-12-31
    阿里 数据库连接
  • 阿里云Xshell数据库一款高效便捷的远程数据库管理工具
    阿里云Xshell数据库是一款专为远程数据库管理设计的高效便捷的工具。它支持多种数据库,如MySQL、Oracle、SQLServer等,并且集成了数据库管理和运维的功能,可以帮助用户更加方便快捷地管理和运维数据库。 随着互联网的不断发展...
    99+
    2023-10-29
    数据库 高效 阿里
  • 阿里云数据库添加远程连接设备
    阿里云数据库是一个强大的云数据库服务,提供多种数据库引擎和数据库类型,包括MySQL、PostgreSQL、Oracle等。本文将详细说明如何在阿里云数据库中添加远程连接设备,以满足不同场景下的数据存储和管理需求。 阿里云数据库添加远程连接...
    99+
    2023-10-28
    阿里 数据库 设备
  • 阿里云数据库如何远程连接电脑
    简介 阿里云数据库是一种高性能、高可用性的云数据库服务,可以满足企业级应用的需求。在使用阿里云数据库时,有时候需要通过远程连接电脑来进行管理和操作。本文将介绍如何通过远程连接电脑来访问阿里云数据库。远程连接电脑的步骤步骤一:安装远程桌面连接...
    99+
    2024-01-31
    阿里 数据库 电脑
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作