熟悉Android软件开发流程;
理解并运用MVC/State框架开发整个项目;
熟练运用异步任务、后台服务、进度条交互显示等功能扩展、完善项目功能;
能够熟练应用各种控件、手机功能、开发框架,编码、实现完整Android项目。
在实验二的基础上,进一步通过开发框架的合理应用来改进项目的易扩展性;
通过AsyncTask、Services、Intent、Thread、Handler等技术的合理组合与运用,修改完善原项目,在易用性、交互性上进一步提高。
进一步加深对程序设计的理解认识,写出自己的心得体会。
详情:
了解开发框架及相关技术;
掌握State、MVC框架的构造原理与使用方法;
运用软件开发思想,通过融合手机功能、后台服务及其它方法、技术,完善整个项目,全方位提升软件质量。
学会调试Android程序,熟悉调试工具的使用,并写出一份完整的软件开发、测试、功能描述文档,完成整个Android项目文档的整理、修订。
一个简单的电子书管理系统,后端是一个springboot的后端项目,
Kotlin 是一种跨平台、静态类型、面向对象的编程语言,它是一种现代化的语言,可以帮助开发者编写更简洁、更可读、更易于维护的代码。Kotlin 是一种基于 JVM 的语言,与 Java 兼容,并且可以与 Java 代码无缝集成。Kotlin 也可以编译为 JavaScript 或本地代码,因此可以用于多种应用程序开发,包括 Android 应用程序、Web 应用程序和桌面应用程序。
Gson 是 Google 提供的一个用于处理 JSON 数据的 Java 库。它可以将 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象。Gson 支持复杂的对象图、泛型、自定义序列化和反序列化规则等高级特性,使开发人员可以轻松地将 JSON 数据转换为 Java 对象,或将 Java 对象转换为 JSON 数据。
Retrofit 是一个用于 Android 和 Java 应用程序的网络请求库。它基于 OkHttp 库构建,可以轻松地进行 HTTP 请求和响应处理。Retrofit 支持多种请求方式,包括 GET、POST、PUT、DELETE 等,还支持自定义请求头、请求参数和请求体。Retrofit 还支持异步请求和 RxJava 响应式编程,使开发人员可以更轻松地处理网络请求和响应。
Room 是 Android 中的一个持久性库,可以帮助开发人员轻松地访问 SQLite 数据库。它提供了一个类型安全的 API,可以将 SQLite 查询映射到 Java 对象,从而简化了数据库访问。Room 还提供了编译时检查和代码生成功能,可以帮助开发人员避免常见的 SQLite 错误和运行时异常。
Material 2 是 Google 提供的一组用于 Android 应用程序的 UI 组件和设计指南。它提供了一系列标准化的 UI 控件和布局,可以帮助开发人员创建具有一致性和美观性的 Android 应用程序。Material 2 还提供了许多设计指南和最佳实践,可以帮助开发人员创建符合用户体验标准的应用程序。
Spring Boot 是 Spring 框架的一个子项目,它提供了一种快速创建基于 Spring 的应用程序的方法。Spring Boot 提供了许多开箱即用的功能,包括自动配置、嵌入式 Web 服务器、安全性、监控和管理等。Spring Boot 还支持许多开发人员常用的技术栈,包括 Spring MVC、JPA、MyBatis、Thymeleaf 等。
MyBatis 是一个用于 Java 应用程序的持久性框架,它可以帮助开发人员轻松地访问数据库。MyBatis 提供了一个简单的 SQL 映射器,可以将 SQL 查询映射到 Java 对象,从而简化了数据库访问。MyBatis 还提供了许多高级特性,包括动态 SQL、批量操作、缓存等。
Spring Security 是 Spring 框架的一个子项目,它提供了一种安全性框架,可以帮助开发人员保护应用程序免受各种攻击。Spring Security 提供了许多安全性功能,包括身份验证、授权、加密、会话管理等。它还支持许多常见的身份验证和授权机制,包括基于表单、基于 HTTP 基本认证、OAuth 等。
MySQL 是一个流行的开源关系型数据库管理系统,它支持多种操作系统和编程语言。MySQL 提供了许多高级特性,包括事务处理、存储过程、触发器、视图等,使开发人员可以轻松地进行数据管理和查询。
Redis 是一个高性能的键值存储数据库,它可以将数据存储在内存中,以提高访问速度。Redis 支持多种数据结构,包括字符串、哈希表、列表、集合等,还提供了许多高级特性,包括事务处理、发布/订阅、Lua 脚本等。Redis 通常用于缓存、会话管理、消息队列等场景。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
├─app
│ │ build.gradle.kts
│ │ proguard-rules.pro
│ │
│ └─src
│ ├─androidTest
│ │ └─java
│ │ └─com
│ │ └─lmio
│ │ └─mlib
│ │ ExampleInstrumentedTest.kt
│ ├─main
│ │ │ AndroidManifest.xml
│ │ ├─java
│ │ │ └─com
│ │ │ └─lmio
│ │ │ └─mlib
│ │ │ │ MainActivity.kt
│ │ │ ├─Dao
│ │ │ ├─entity
│ │ │ ├─services
│ │ │ ├─stores
│ │ │ ├─ui
│ │ │ │ ├─auth
│ │ │ │ ├─home
│ │ │ │ ├─profile
│ │ │ │ └─settings
│ │ │ │
│ │ │ └─utils
│ │ └─res
│ │ ├─drawable
│ │ ├─layout
│ │ ├─menu
│ │ ├─navigation
│ │ ├─raw
│ │ ├─values
│ │ └─xml
│ │ backup_rules.xml
│ │ data_extraction_rules.xml
│ │ root_preferences.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
interface ApiService {
@FormUrlEncoded
@POST ( "/api/auth/login" )
fun login (
@Field ( "username" ) username : String ,
@Field ( "password" ) password : String ,
@Field ( "remember" ) remember : Boolean
): Call < ApiResponse < Account >>
@FormUrlEncoded
@POST ( "/api/auth/valid-register-email" )
fun validateRegisterEmail (
@Field ( "email" ) email : String
): Call < ApiResponse < String >>
@FormUrlEncoded
@POST ( "/api/auth/valid-reset-email" )
fun validateResetEmail (
@Field ( "email" ) email : String
): Call < ApiResponse < String >>
@FormUrlEncoded
@POST ( "/api/auth/register" )
fun registerUser (
@Field ( "username" ) username : String ,
@Field ( "password" ) password : String ,
@Field ( "email" ) email : String ,
@Field ( "code" ) code : String
): Call < ApiResponse < String >>
@FormUrlEncoded
@POST ( "/api/auth/start-reset" )
fun startReset (
@Field ( "email" ) email : String ,
@Field ( "code" ) code : String
): Call < ApiResponse < String >>
@FormUrlEncoded
@POST ( "/api/auth/do-reset" )
fun resetPassword (
@Field ( "password" ) password : String
): Call < ApiResponse < String >>
@POST ( "/api/book/search" )
fun searchBooks ( @Query ( "text" ) text : String ): Call < ApiResponse < List < Book >>>
}
接口请求配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
object Requests {
private const val BASE _URL = "http://10.0.2.2:8080/"
private lateinit var request : ApiService
fun getApiService (): ApiService {
return request
}
fun Init () {
val timeoutSeconds = 20L // 超时时间,以秒为单位
val cookieManager = CookieManager ()
cookieManager . setCookiePolicy ( CookiePolicy . ACCEPT_ALL )
val cookieJar : CookieJar = JavaNetCookieJar ( cookieManager )
val okHttpClient = OkHttpClient . Builder ()
. connectTimeout ( timeoutSeconds , TimeUnit . SECONDS )
. readTimeout ( timeoutSeconds , TimeUnit . SECONDS )
. writeTimeout ( timeoutSeconds , TimeUnit . SECONDS )
. cookieJar ( cookieJar )
. build ()
val retrofit = Retrofit . Builder ()
. baseUrl ( BASE_URL )
. client ( okHttpClient ) // 设置自定义的 OkHttpClient
. addConverterFactory ( GsonConverterFactory . create ())
. build ()
request = retrofit . create ( ApiService :: class . java )
}
fun < T > enqueue ( call : Call < ApiResponse < T >>, view : View ,
success : (( String , T ?) -> Unit )? = null ,
failure : (( String , T ?) -> Unit )? = null ,
error : (() -> Unit )? = null ) {
call . enqueue ( object : Callback < ApiResponse < T >> {
override fun onResponse ( call : Call < ApiResponse < T >>, response : Response < ApiResponse < T >>) {
val result : ApiResponse < T >? = response . body ()
result ?. let {
val message = it . message
val data : T = it . data
if ( it . success ) {
success ?. invoke ( message , data ) ?: SnackbarUtil . showSuccessMessage ( view , message )
} else {
failure ?. invoke ( message , data ) ?: SnackbarUtil . showWarningMessage ( view , message )
}
}
}
override fun onFailure ( call : Call < ApiResponse < T >>, t : Throwable ) {
error ?. invoke () ?: SnackbarUtil . showErrorMessage ( view , "请求超时" )
}
})
}
}
1
2
git clone https://github.com/Clear-Love/Mlib-App.git # app
git clone https://github.com/Clear-Love/mlib.git # 后端
该项目采用了 Kotlin 语言和 MVVM 架构,同时还涉及到了后端技术领域,包括 Spring Boot、MyBatis、Spring Security、MySQL 和 Redis 等技术,并针对 Android 应用程序使用了 Room 数据库的方法。
在学习 Spring Boot 和 MyBatis 时,我深入了解了如何使用 Java 技术栈来构建高效的后端服务,快速创建基于 Spring 的应用程序,并使用 MyBatis 进行数据库访问。另外,我还掌握了如何使用 Spring Security 来保证应用程序的安全。
在学习 Redis 方面,我了解了如何使用 Redis 数据库来提高应用程序的性能和可扩展性。我深入学习了 Redis 的基本概念和数据结构,并了解了如何使用 Redis 来进行缓存、会话管理和消息队列等操作。
在 Android 应用程序方面,我掌握了使用 Room 数据库进行本地数据存储的技术。我深入了解了 Room 的基本概念和使用方法,并学习了如何使用它来进行 CRUD 操作和数据访问。
这些技术和工具的学习和理解,使我能够更好地开发和维护 Android 应用程序和后端服务。我相信,在未来的开发中,这些技术和工具将发挥重要作用,帮助我构建更高效、更可靠、更安全的应用程序。