Android studio中使用Kotlin语言连接MySql数据库/本地Apache服务器
Android studio 中使用Kotlin语言 连接 MySql 数据库/本地Apache服务器
不用本地服务器
———–这与java中用MyBatis连接的区别
在 Android Studio 中使用 Kotlin 连接 MySQL 数据库和使用 Java 连接 MySQL 数据库类似,都需要使用 JDBC(Java Database Connectivity)驱动程序。下面是一个使用 Kotlin 连接 MySQL 数据库并执行 SQL 查询的简单示例:
1.添加 JDBC 驱动程序依赖
在项目的 build.gradle 文件中添加 MySQL JDBC 驱动程序依赖:
1 | |
2.创建数据库连接
在 Kotlin 代码中使用 JDBC 创建 MySQL 数据库连接:
1 | |
3.执行 SQL 查询
使用 JDBC 连接 MySQL 数据库后,可以使用 Statement 或 PreparedStatement 执行 SQL 查询。下面是一个使用 Statement 执行 SQL 查询的示例:
1 | |
在上述代码中,使用 executeQuery() 方法执行 SQL 查询,并使用 while 循环遍历查询结果集。注意,需要在使用完查询结果集后及时关闭 ResultSet、Statement 和数据库连接,以释放资源。
至于与 Java 中使用 MyBatis 连接 MySQL 数据库的区别,主要在于使用的 API 不同,但连接方式和 SQL 执行过程大体相同。通常,使用 Kotlin 连接 MySQL 数据库会更加简洁和易读。
使用Web服务器(本地Apache)
关于php,apache的安装参照官方文档,然后在php中配置mysqli模块,解析成 JSON 数据供AS中使用
连接 MySQL 数据库的最佳实践是通过建立一个 Web 服务来实现,然后 Android 应用程序通过调用 Web 服务的 API 来访问数据库。下面是一个简单示例,展示了如何使用 Kotlin 和 PHP 构建一个简单的 Web 服务来访问 MySQL 数据库。
首先,在 Web 服务器上安装 Apache、PHP 和 MySQL,并创建一个名为 mydatabase 的 MySQL 数据库,其中包含一个名为 users 的表,包含三个字段:id、name 和 age。还需要创建一个 PHP 脚本,用于访问 MySQL 数据库,并将查询结果以 JSON 格式返回给 Android 应用程序。
PHP 脚本代码(get_users.php):
1 | |
在 Android Studio 中,使用 Volley 库来实现与 Web 服务的通信。
下面是一个简单的示例,展示了如何使用 Kotlin 和 Volley 库从 Web 服务中获取用户数据。
首先,在项目的 build.gradle 文件中添加 Volley 库的依赖:
1 | |
然后,在 activity_main.xml 文件中添加一个 ListView 组件,用于显示用户数据:
1 | |
最后,在 MainActivity.kt 文件中添加以下代码:
JsonArrayRequest()使用简述见另一文章
1 | |
示例中使用JsonArrayRequest 类来发起 JSON 请求,并在响应的回调函数中解析 JSON 数据,将其添加到 ListView 中显示。
细节处理:
php运行中遇到Class “mysqli” not found 怎么解决【PHP开启mysqli扩展】
简述:在 php.ini 文件中查找以下两行代码,并去掉前面的分号 (;):
1 | |
步骤1:
php.ini中修改mysqli 去掉前面的分号
步骤2:
修改extension_dir指向绝对路径**(完整路径),默认是相对路径(.\ext),去掉前面的;
查看:
新建test.php,运行localhost/test.php
1 | |
php中无法将查询结果转换成 JSON 格式
如果已经安装了 mysqli 扩展但仍然无法将查询结果转换成 JSON 格式,那么可能是查询结果无法被正确转换为 UTF-8 编码所致。解决:查询之前设置字符集编码
1 | |
MainActivity.kt 代码可以正常编译并且运行,但是没有将数据显示在 ListView
原因:处理 JSON 数据时出现了问题
在 MainActivity.kt 代码中,使用了 JsonArrayRequest 类来发起 JSON 请求,并在响应的回调函数中解析 JSON 数据,并将其添加到 ListView 中显示。因此,如果在这个过程中出现了问题,可能导致数据无法正确显示在 ListView 上。
以下是一些可能会导致这种情况发生的原因以及解决方法:
1.检查 PHP 后端代码是否能够正确返回 JSON 数据
在 PHP 后端代码中,需要确保能够正确地将查询结果转换为 JSON 格式。可以尝试在浏览器中直接访问后端接口,并检查返回的 JSON 数据是否符合预期。
结果应为
2.检查 Android 设备是否可以访问 PHP 后端接口
如果 Android 设备无法访问 PHP 后端接口,那么在应用中也无法正确地获取数据。可以尝试在浏览器中访问后端接口,并检查是否能够正常地返回数据。
WAY:使用 Android 设备上的 Web 浏览器来检查是否可以访问 PHP 后端接口。在 Android 设备上打开 Web 浏览器,并输入 PHP 后端接口的 URL 地址,然后尝试加载该页面。
总结:如果页面成功加载,并且可以看到预期的 JSON 数据,那么说明 Android 设备可以访问 PHP 后端接口,并且应用程序也应该可以获取到数据。如果页面无法加载,或者看到了错误消息,那么说明存在一些与设备或网络相关的问题,需要进一步检查。在检查时,可以尝试以下步骤:
- 确认设备是否连接到正确的 Wi-Fi 网络或移动数据网络,并且可以正常访问 Internet。
- 检查 PHP 后端接口的 URL 是否正确,包括主机名、端口号和路径等信息。
- 如果使用的是本地 PHP 服务器,则需要确保 Android 设备与 PHP 服务器在同一 Wi-Fi 网络中,并且可以通过 IP 地址相互访问。
细节:在 Android 设备上访问 localhost 通常是不可能的,因为 localhost 指的是本地计算机(电脑),而 Android 设备无法直接访问使用的电脑。但是,通过以下两种方式之一来访问本地 PHP 服务器:
- 使用局域网 IP 地址:将电脑和 Android 设备连接到同一个局域网中,然后使用电脑的 IP 地址来代替 localhost。通过在命令提示符中输入 “ipconfig”(在 Windows 上)或 “ifconfig”(在 macOS 或 Linux 上)来查找电脑的 IP 地址。例如,如果电脑的 IP 地址为 192.168.1.100,则可以在 Android 应用程序中使用 http://192.168.1.100:80/myphpscript.php 来代替 http://localhost/myphpscript.php。
- 使用公共 IP 地址:如果计算机连接到了互联网,并且路由器支持端口转发,则可以使用计算机的公共 IP 地址来代替 localhost。可以在路由器设置中配置端口转发,将外部请求转发到计算机的端口上。例如,如果公共 IP 地址为 123.45.67.89,将端口 80 转发到计算机的端口 80,则可以在 Android 应用程序中使用 http://123.45.67.89/myphpscript.php 来代替 http://localhost/myphpscript.php。
无论选择哪种方法,都需要确保计算机上正在运行 PHP 服务器,并且 PHP 脚本可以通过指定的 IP 地址和端口进行访问。另外,还需要确保 Android 应用程序的网络权限已经正确配置,并且可以连接到指定的 IP 地址和端口。
网络权限的配置:这个问题困扰了很久,才发现是没有给程序相应的网络权限
发现问题:Logcat中报错java.net.SocketException: Permission denied
应用程序试图访问受保护的网络资源,但是系统不允许它这样做。通常是由于应用程序没有请求或获得必要的网络权限所致。
解决:在 AndroidManifest.xml 文件中添加以下行
1 | |
3.检查 Android 应用是否正确处理 JSON 数据
在 MainActivity.kt 代码中,需要确保能够正确地解析 PHP 后端返回的 JSON 数据,并将其添加到 ListView 中。可以使用 Android Studio 的调试功能来检查应用程序在运行时的状态,并确定是否有任何错误或异常。
- 首先,确保应用程序能够从服务器获取 JSON 数据。可以在浏览器中访问 JSON 数据的 URL,以确保服务器正在正确地返回 JSON 数据。
- 在 Android 应用程序中,使用调试工具(例如 Logcat)来检查从服务器接收到的 JSON 数据是否正确。
在 Response.Listener 和 Response.ErrorListener 两个回调函数中添加一些日志语句来确定是否成功接收到响应或者是否发生了错误
1 | |
在 Logcat 中查看是否收到了响应或者是否有错误信息。
- 在 Logcat 窗口中,查看所有正在运行的 Android 设备和模拟器的日志消息。
- 使用过滤器查找消息。使用 Logcat 窗口顶部的搜索栏,或者通过在过滤器栏中输入关键字或过滤器等级来进行过滤。
Log.d("MainActivity", "Response received: $response") 是在 Response.Listener 回调函数中添加的,所以它的 TAG 是 “MainActivity”,输出的是 “Response received” 字符串和响应的内容。
日志的 TAG 是用于过滤和识别日志消息的标识符。在应用程序中,使用不同的 TAG 来标记不同的日志消息。
在 Logcat 中,通过选择过滤器栏中的 TAG 选项来过滤特定的日志消息。因此,通过为不同的日志消息指定不同的 TAG,可以查找和过滤感兴趣的日志消息。
在示例代码中,使用 “MainActivity” 作为 TAG。
最后,正常运行的结果:
使用JDBC直接访问数据库和通过Web服务器调用数据之间的区别:
- 安全性:使用Web服务器可以提供更好的安全性,因为您可以在服务器上实现身份验证和授权。如果您直接使用JDBC连接数据库,则需要在代码中包含用户名和密码,这可能会导致安全问题。
- 可伸缩性:使用Web服务器可以更容易地扩展您的应用程序,因为您可以在服务器上添加更多的资源(例如,更多的CPU和内存),以处理更多的请求。如果您直接使用JDBC连接数据库,则可能需要管理多个数据库连接,这可能会导致性能问题。
- 兼容性:通过Web服务器调用数据可以提高应用程序的兼容性。不同的客户端可以使用不同的协议(例如,HTTP和HTTPS)与服务器进行通信。如果您直接使用JDBC连接数据库,则需要确保客户端具有正确的JDBC驱动程序。
- 可维护性:通过Web服务器调用数据可以更容易地维护应用程序。如果您直接使用JDBC连接数据库,则需要在应用程序中维护数据库连接代码,这可能会导致维护成本高昂。
总之,通过Web服务器调用数据是一种更安全、更可伸缩、更兼容和更易于维护的方法,而直接使用JDBC连接数据库则可能导致安全性、可伸缩性、兼容性和可维护性方面的问题。