既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
📘二、编码阶段Coding
1. 项目结构🗂️
(1)文件目录
先来看项目的文件目录,详情看下图👇
(2)AndroidManifest.xml
接下来附上 AndroidManifest.xml
的代码,具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.financial.management">
<application
android:allowBackup="true"
android:icon="@mipmap/ic\_launcher"
android:label="个人财务管理App"
android:roundIcon="@mipmap/ic\_launcher"
android:supportsRtl="true"
android:theme="@style/Theme.Final">
<activity android:name="com.financial.management.ManageActivity"></activity>
<activity android:name="com.financial.management.SearchRecordActivity" />
<activity android:name="com.financial.management.RegisterActivity"/>
<activity android:name="com.financial.management.UserCenterActivity" />
<activity android:name="com.financial.management.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
(3)Activity类解读
看完上面两个内容之后,接下来是Activity类的解读时间。详情见下表👇
文件名 | 作用 |
---|---|
MainActivity | 用户登录页面Activity,用户可以进行登录。 |
RegisterActivity | 用户注册页面Activity,用户可以进行注册。 |
UserCenterActivity | 个人中心Activity,对应用户个人中心的4个按钮进行功能编写,实现用户收支管理、查看收支、收支统计、退出登录四大功能。 |
ManageActivity | 收支管理Activity,对用户的收入和支出进行管理。 |
SearchRecordActivity | 查询收支Activity,通过条件对数据库中的数据进行查询,得出用户想要查询的收支结果。 |
DBHelper | 创建数据库表和数据库数据,同时实现与数据库操作相关的登录和注册方法。 |
User | 用户类Activity,用于获取用户ID以及密码。 |
(4)XML解读
解读完 Activity
类之后,现在来对 XML
的各个文件进行介绍。详情见下表👇
文件名 | 作用 |
---|---|
activity_main.xml | 用户登录页面,用户通过输入账号和密码,进行登录操作。 |
activity_register.xml | 用户注册页面,用户通过输入账号和密码,进行注册操作。 |
activity_user_center.xml | 个人中心页面,当用户登录成功以后,进行个人中心页面。个人中心实现收支管理、查看收支、收支统计、退出登录四大功能。 |
activity_search_record.xml | 通过选择年份月份来进行查询该年该月份的各个收入支出详情,并且计算总金额以及根据类别来计算该类别的总金额。 |
activity_manage.xml | 用户对自己的日常开销进行收支管理,可以进行添加、删除和修改等操作。 |
record_item_layout.xml | 用来存储列表的传输数据 |
到这里,大家先对待会要编写的 Activity
类和 XML
文件所要展示的功能先进行一番了解。
2. 静态页面⌛
现在,我们到了真正的编码阶段啦!如果是按照我的编码习惯的话,我一般会先把静态页面进行构建,并把一些需要预留的id等等信息给先处理好,方便后面写业务逻辑时可以直接进行绑定。
针对以上6个静态页面,下面将进行代码编写。
(1)用户登录页面activity_main.xml
activity_main.xml
是用户登录页面,当用户通过输入账号和密码时,可以进行登录操作。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:orientation="vertical"
android:gravity="center\_horizontal"
app:layout\_constraintLeft\_toLeftOf="parent"
app:layout\_constraintTop\_toTopOf="parent">
<TextView
android:id="@+id/textView1"
android:layout\_width="360dp"
android:layout\_height="360dp"
android:gravity="center"
android:background="@drawable/login\_logo"
android:textColor="#fff"
android:textSize="24dp"
android:layout\_marginTop="-30dp"
android:layout\_marginHorizontal="45dp"/>
<TextView
android:id="@+id/textView"
android:layout\_width="match\_parent"
android:layout\_height="60dp"
android:gravity="center|center\_horizontal"
android:text="用户登录"
android:textColor="#5768C5"
android:textSize="20dp"
android:layout\_marginTop="-60dp"
/>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<ImageView
android:id="@+id/imageView3"
android:layout\_width="50dp"
android:layout\_height="50dp"
android:layout\_weight="0"
app:srcCompat="@drawable/account" />
<EditText
android:id="@+id/edt\_uid"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="2"
android:ems="10"
android:hint="请输入您的用户名"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_weight="0"
android:orientation="horizontal"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<ImageView
android:id="@+id/imageView4"
android:layout\_width="50dp"
android:layout\_height="50dp"
android:layout\_weight="0"
app:srcCompat="@drawable/password" />
<EditText
android:id="@+id/edt\_upwd"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="请输入您的密码"
android:inputType="textPassword" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="80dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="60dp">
<Button
android:id="@+id/btn\_login"
android:layout\_width="100dp"
android:layout\_height="60dp"
android:layout\_weight="1"
android:text="登录"
android:textSize="18dp"
app:backgroundTint="#4757AE"
app:cornerRadius="50dp" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="vertical">
<Button
android:id="@+id/btn\_register"
android:layout\_width="match\_parent"
android:layout\_height="40dp"
android:gravity="center"
android:text="还没有账号?现在注册"
android:textColor="#888282"
android:textColorHint="#FFFFFFFF"
android:backgroundTint="#FFFFFFFF"
android:color="#FFFFFF"
/>
</LinearLayout>
<TextView
android:layout\_width="match\_parent"
android:layout\_height="20dp"
android:background="#FFFFFF"
android:layout\_marginTop="-10dp"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(2)用户注册页面activity_register.xml
activity_register.xml
是用户注册页面,用户通过输入账号和密码,可以进行注册操作。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".RegisterActivity">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:orientation="vertical"
android:gravity="center"
app:layout\_constraintTop\_toTopOf="parent">
<TextView
android:id="@+id/textView10"
android:layout\_width="220dp"
android:layout\_height="220dp"
android:background="@drawable/register\_logo"
android:gravity="center"
android:textColor="#FFEB3B"
android:layout\_marginBottom="20dp"/>
<TextView
android:id="@+id/textView5"
android:layout\_width="match\_parent"
android:layout\_height="50dp"
android:gravity="center"
android:text="用户注册"
android:textColor="#0C6BC2"
android:textSize="22sp" />
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:paddingHorizontal="20dp"
android:layout\_marginTop="10dp">
<TextView
android:id="@+id/textView7"
android:layout\_width="wrap\_content"
android:layout\_height="45dp"
android:layout\_weight="0"
android:text="账 号: "
android:textColor="#0C6BC2"
android:textSize="22sp" />
<EditText
android:id="@+id/edt\_rid"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="请输入需要注册的账号"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:paddingHorizontal="20dp"
android:layout\_marginVertical="15dp">
<TextView
android:id="@+id/textView8"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="0"
android:text="密 码: "
android:textColor="#0C6BC2"
android:textSize="22sp" />
<EditText
android:id="@+id/edt\_rpwd"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="请输入密码"
android:inputType="textPassword" />
</LinearLayout>
<Button
android:id="@+id/btn\_registeruser"
android:layout\_width="260dp"
android:layout\_height="60dp"
android:layout\_gravity="center"
android:layout\_marginVertical="20dp"
android:background="#2D6C2F"
android:gravity="center"
android:text="注册"
android:textSize="22sp"
app:backgroundTint="#1C8DE6" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(3)用户个人中心页面activity_user_center.xml
现在,来到了个人中心页面。在个人中心页面当中,将会显示具体的用户名。同时, 有四个按钮入口,分别是:收支管理,查看收支,退出登录和收支统计。来看下具体代码实现:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".UserCenterActivity">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:orientation="vertical"
app:layout\_constraintLeft\_toLeftOf="parent"
app:layout\_constraintTop\_toTopOf="parent">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="120dp"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:id="@+id/imageView"
android:layout\_width="60dp"
android:layout\_height="60dp"
app:srcCompat="@drawable/girl"
android:layout\_marginHorizontal="30dp"/>
<TextView
android:id="@+id/tv\_welcome"
android:layout\_width="wrap\_content"
android:layout\_height="match\_parent"
android:layout\_weight="1"
android:gravity="center|left"
android:textColor="#4F92CF"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:gravity="center\_horizontal"
android:layout\_marginTop="40dp">
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="20dp"
android:background="#FFFFFF"
android:gravity="center\_horizontal"
android:orientation="vertical"
android:padding="24dp"
android:elevation="10dp"
app:cornerRadius="30dp">
<ImageView
android:id="@+id/btn\_recordmanage"
android:layout\_width="60dp"
android:layout\_height="60dp"
app:srcCompat="@drawable/revenue" />
<TextView
android:id="@+id/textView17"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginTop="20dp"
android:text="收支管理"
android:textColor="#252020"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:orientation="vertical"
android:gravity="center\_horizontal"
android:layout\_marginHorizontal="20dp"
android:background="#FFFFFF"
android:padding="24dp"
android:elevation="10dp"
app:cornerRadius="30dp">
<ImageView
android:id="@+id/btn\_searchrecord"
android:layout\_width="60dp"
android:layout\_height="60dp"
app:srcCompat="@drawable/look" />
<TextView
android:id="@+id/textView22"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="查看收支"
android:textColor="#FF252020"
android:textSize="18sp"
android:layout\_marginTop="20dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:gravity="center\_horizontal"
android:layout\_marginVertical="30dp">
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:orientation="vertical"
android:gravity="center\_horizontal"
android:layout\_marginHorizontal="20dp"
android:background="#FFFFFF"
android:padding="24dp"
android:elevation="10dp"
app:cornerRadius="30dp">
<ImageView
android:id="@+id/btn\_exit"
android:layout\_width="60dp"
android:layout\_height="60dp"
app:srcCompat="@drawable/exit" />
<TextView
android:id="@+id/textView4"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:gravity="center"
android:text="退出登录"
android:textColor="#FF252020"
android:textSize="18sp"
android:layout\_marginTop="20dp"/>
</LinearLayout>
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:orientation="vertical"
android:gravity="center\_horizontal"
android:layout\_marginHorizontal="20dp"
android:background="#FFFFFF"
android:padding="24dp"
android:elevation="10dp"
app:cornerRadius="30dp">
<ImageView
android:id="@+id/btn\_calcmoney"
android:layout\_width="60dp"
android:layout\_height="60dp"
app:srcCompat="@drawable/statics" />
<TextView
android:id="@+id/textView23"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="收支统计"
android:textColor="#FF252020"
android:textSize="18sp"
android:layout\_marginTop="20dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(4)用户搜索记录页面activity_search_record.xml
用户可以通过选择年份月份和筛选类型,点击搜索,来查询该年该月份的各个收入和支出的详情,同时在该时间点和该筛选类型下,点击计算可以对总金额进行计算。下面附上具体代码实现:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap\_content"
tools:context=".SearchRecordActivity">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:orientation="vertical"
app:layout\_constraintLeft\_toLeftOf="parent"
app:layout\_constraintTop\_toTopOf="parent">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="vertical"
android:gravity="center"
android:layout\_marginTop="50dp"
android:layout\_marginBottom="10dp">
<ImageView
android:id="@+id/imageView2"
android:layout\_width="120dp"
android:layout\_height="120dp"
app:srcCompat="@drawable/income\_2" />
<TextView
android:id="@+id/textView20"
android:layout\_width="wrap\_content"
android:layout\_height="match\_parent"
android:layout\_weight="1"
android:text="我的收支"
android:textColor="#3F51B5"
android:textSize="20sp"
android:layout\_marginTop="10dp"/>
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="100dp"
android:orientation="horizontal"
android:gravity="center\_vertical"
android:layout\_marginHorizontal="24dp"
android:layout\_marginTop="30dp">
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="100dp"
android:orientation="vertical">
<TextView
android:id="@+id/textView33"
android:layout\_width="wrap\_content"
android:layout\_height="50dp"
android:text="日期 "
android:gravity="center\_vertical"
android:textColor="#111113"
android:textSize="18sp" />
<TextView
android:id="@+id/textView34"
android:layout\_width="wrap\_content"
android:layout\_height="50dp"
android:text="类型 "
android:gravity="center\_vertical"
android:textColor="#FF111113"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="100dp"
android:layout\_weight="1"
android:orientation="vertical">
<Spinner
android:id="@+id/spin\_date"
android:layout\_width="match\_parent"
android:layout\_height="50dp" />
<Spinner
android:id="@+id/spin\_type"
android:layout\_width="match\_parent"
android:layout\_height="50dp"
android:layout\_weight="1" />
</LinearLayout>
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="100dp"
android:orientation="vertical"
android:gravity="center\_vertical">
<Button
android:id="@+id/btn\_search"
android:layout\_width="60dp"
android:layout\_height="40dp"
android:background="#39DC54"
android:text="搜索"
android:textColor="#FAF9F9"
android:textSize="12sp"
app:backgroundTint="#5E97DA" />
</LinearLayout>
</LinearLayout>
<ImageView
android:layout\_width="360dp"
android:layout\_height="0.5dp"
android:background="#D1CDCD"
android:layout\_gravity="center"
android:paddingHorizontal="24dp"/>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="50dp"
android:gravity="center\_vertical"
android:orientation="horizontal"
android:layout\_marginHorizontal="24dp">
<TextView
android:id="@+id/textView32"
android:layout\_width="wrap\_content"
android:layout\_height="50dp"
android:text="总金额 "
android:gravity="center\_vertical"
android:textColor="#FF111113"
android:textSize="18sp" />
<TextView
android:id="@+id/tv\_show"
android:layout\_width="wrap\_content"
android:layout\_height="50dp"
android:layout\_weight="1"
android:textColor="#4CAF65"
android:textSize="24sp"
android:gravity="center\_vertical"/>
<Button
android:id="@+id/btn\_calc"
android:layout\_width="60dp"
android:layout\_height="40dp"
android:gravity="center\_vertical"
android:text="计算"
android:textColor="#FAF9F9"
android:textSize="12sp"
app:backgroundTint="#5E97DA" />
</LinearLayout>
<ImageView
android:layout\_width="360dp"
android:layout\_height="0.5dp"
android:background="#D1CDCD"
android:layout\_gravity="center"
android:paddingHorizontal="20dp"/>
<TextView
android:id="@+id/textView31"
android:layout\_width="match\_parent"
android:layout\_height="40dp"
android:gravity="center\_vertical"
android:text="查询结果 "
android:layout\_marginTop="20dp"
android:textColor="#111113"
android:layout\_marginHorizontal="24dp"
android:textSize="18sp"/>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="horizontal"
android:layout\_marginVertical="20dp"
android:layout\_marginHorizontal="20dp">
<TextView
android:id="@+id/textView29"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="序号"
android:textColor="#6290c8"
android:textStyle="bold"
android:textSize="18sp"
android:gravity="center\_horizontal"/>
<TextView
android:id="@+id/textView26"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="日期"
android:textColor="#6290c8"
android:textStyle="bold"
android:textSize="18sp"
android:gravity="center\_horizontal"/>
<TextView
android:id="@+id/textView25"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="类型"
android:textColor="#6290c8"
android:textStyle="bold"
android:textSize="18sp"
android:gravity="center\_horizontal"/>
<TextView
android:id="@+id/textView27"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="金额"
android:textColor="#6290c8"
android:textStyle="bold"
android:textSize="18sp"
android:gravity="center\_horizontal"/>
<TextView
android:id="@+id/textView28"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="说明"
android:textColor="#6290c8"
android:textStyle="bold"
android:textSize="18sp"
android:gravity="center\_horizontal"/>
</LinearLayout>
<ListView
android:id="@+id/searchlistview"
android:layout\_width="match\_parent"
android:layout\_height="500dp"
android:layout\_weight="0"
android:layout\_marginHorizontal="20dp"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(5)收支管理页面activity_manage.xml
对于收支管理页面来说,用户可以对自己的日常开销进行收支管理,同时也可以进行添加、删除和修改等操作。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ManageActivity">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:gravity="center\_horizontal"
android:orientation="vertical"
app:layout\_constraintBottom\_toBottomOf="parent"
app:layout\_constraintLeft\_toLeftOf="parent"
app:layout\_constraintTop\_toTopOf="parent">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="200dp"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout\_width="150dp"
android:layout\_height="150dp"
android:layout\_marginTop="20dp"
app:srcCompat="@drawable/income\_1" />
<TextView
android:id="@+id/textView20"
android:layout\_width="wrap\_content"
android:layout\_height="30dp"
android:text="收支管理"
android:textColor="#3F51B5"
android:textSize="20dp" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="50dp"
android:gravity="center\_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/textView36"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="20dp"
android:text="您选择的序号是:"
android:textColor="#152029"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv\_test"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:hint="暂未选择"
android:textColor="#4CAF50"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="20dp"
android:layout\_marginVertical="10dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/textView29"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_gravity="center"
android:layout\_weight="1"
android:text="序号"
android:textColor="#111819"
android:textSize="18sp" />
<TextView
android:id="@+id/textView26"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="日期"
android:textColor="#111819"
android:textSize="18sp" />
<TextView
android:id="@+id/textView25"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="类型"
android:textColor="#111819"
android:textSize="18sp" />
<TextView
android:id="@+id/textView27"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="金额"
android:textColor="#111819"
android:textSize="18sp" />
<TextView
android:id="@+id/textView28"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:text="说明"
android:textColor="#111819"
android:textSize="18sp" />
</LinearLayout>
<ImageView
android:layout\_width="380dp"
android:layout\_height="0.5dp"
android:background="#D8D3D3"
android:paddingHorizontal="20dp" />
<ListView
android:id="@+id/recordlistview"
android:layout\_width="wrap\_content"
android:layout\_height="120dp"
android:layout\_weight="1"></ListView>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="14dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView18"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="日期: "
android:textColor="#101112"
android:textSize="18sp" />
<EditText
android:id="@+id/edt\_date"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="填写日期,如:202107表示2021年7月"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="14dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView21"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="类型: "
android:textColor="#101112"
android:textSize="18sp" />
<EditText
android:id="@+id/edt\_type"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="类型为收入或支出"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="14dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView30"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="金额: "
android:textColor="#101112"
android:textSize="18sp" />
<EditText
android:id="@+id/edt\_money"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="请输入金额"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="14dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv\_state"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:text="说明: "
android:textColor="#101112"
android:textSize="18sp" />
<EditText
android:id="@+id/edt\_state"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_weight="1"
android:ems="10"
android:hint="阐述说明"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginVertical="30dp">
<Button
android:id="@+id/btn\_add"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="10dp"
android:layout\_weight="1"
android:text="添加"
app:backgroundTint="#78C6A3" />
<Button
android:id="@+id/btn\_update"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="10dp"
android:layout\_weight="1"
android:text="修改"
app:backgroundTint="#56AB91" />
<Button
android:id="@+id/btn\_delete"
android:layout\_width="wrap\_content"
android:layout\_height="wrap\_content"
android:layout\_marginHorizontal="10dp"
android:layout\_weight="1"
android:text="删除"
app:backgroundTint="#358F80" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(6)列表数据记录record_item_layout.xml
record_item_layout.xml
主要用途是存储列表的传输数据。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout\_width="match\_parent"
android:layout\_height="match\_parent">
<LinearLayout
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
android:orientation="horizontal"
android:layout\_marginHorizontal="20dp"
android:gravity="center\_horizontal"
android:paddingVertical="2dp">
<TextView
android:id="@+id/list\_id"
android:layout\_width="40dp"
android:layout\_height="24dp"
android:layout\_weight="1"
android:textSize="18sp"
android:gravity="center\_horizontal" />
<TextView
android:id="@+id/list\_date"
android:layout\_width="90dp"
android:layout\_height="24dp"
android:layout\_weight="1"
android:textSize="18sp"
android:gravity="center\_horizontal" />
<TextView
android:id="@+id/list\_type"
android:layout\_width="70dp"
android:layout\_height="24dp"
android:layout\_weight="1"
android:textSize="18sp"
android:gravity="center\_horizontal" />
<TextView
android:id="@+id/list\_money"
android:layout\_width="70dp"
android:layout\_height="24dp"
android:layout\_weight="1"
android:textSize="18sp"
android:gravity="center\_horizontal" />
<TextView
android:id="@+id/list\_state"
android:layout\_width="90dp"
android:layout\_height="24dp"
android:layout\_weight="1"
android:textSize="18sp"
android:gravity="center\_horizontal" />
</LinearLayout>
</LinearLayout>
3. 逻辑结构💡
写完静态页面之后,接下来我们要对每个页面的逻辑进行编写。现在我们来看一下各个 Activity
类所实现的内容都有些什么呢?
(1)DBHelper类
DBHelper
类用于创建数据库表和数据库数据,同时实现与数据库操作相关的登录和注册方法。具体代码实现如下:
package com.financial.management;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "Test.db";
public static final String TABLE_NAME = "userinfo";
public static final String COLUMN_USERID = "uid";
public static final String COLUMN_USERPWD = "upwd";
//创建数据库语句
private static final String CREATE_TABLE = "create table if not exists "
+ TABLE_NAME + "(" + COLUMN_USERID + " text not null primary key,"
+ COLUMN_USERPWD + " text not null)";
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
}
//创建数据库方法
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
db.execSQL("insert into " + TABLE_NAME + " values('11','11')");
} catch (SQLException e) {
e.printStackTrace();
}
}
//重置数据库方法(先删表,再建表)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_NAME);
db.execSQL(CREATE_TABLE);
}
//登录方法
public User userlogin(String userId, String userPwd) {
User user = null;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME,
new String[]{COLUMN_USERID, COLUMN_USERPWD},
COLUMN_USERID + "=? and " + COLUMN_USERPWD + "=?",
new String[]{userId, userPwd},
null,
null,
null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
user = new User();
user.setUserId(cursor.getString(cursor.getColumnIndex(COLUMN_USERID)));
user.setUserPwd(cursor.getString(cursor.getColumnIndex(COLUMN_USERPWD)));
}
return user;
}
//注册方法
public long registerUser(User user) {
SQLiteDatabase db = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_USERID, user.getUserId());
contentValues.put(COLUMN_USERPWD, user.getUserPwd());
return db.insert(TABLE_NAME, null, contentValues);
}
}
(2)MainActivity类
MainActivity
类是用户登录页面的Activity,主要编写用户登录页面的代码逻辑。具体代码实现如下:
package com.financial.management;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
//登录页面逻辑
public class MainActivity extends AppCompatActivity {
EditText edt_id,edt_pwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_id = findViewById(R.id.edt_uid);
edt_pwd =findViewById(R.id.edt_upwd);
Button btn_login = findViewById(R.id.btn_login);
//登录按键
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
String userId=edt_id.getText().toString();
String userPwd=edt_pwd.getText().toString();
DBHelper dbuserHelper=new DBHelper(getApplicationContext());
User user = dbuserHelper.userlogin(userId,userPwd);
//登录成功跳转对应类型界面
if(user!=null) {
Toast.makeText(getApplicationContext(), user.getUserId() + "登录成功", Toast.LENGTH_SHORT).show();
Intent intent;
ArrayList<User> list = new ArrayList<>();
list.add(user);
intent = new Intent(getApplicationContext(), UserCenterActivity.class);
intent.putParcelableArrayListExtra("LoginUser", list);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),"登录失败,密码错误或账号不存在!",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"数据库异常",Toast.LENGTH_SHORT).show();
}
}
});
//注册按键
Button btn_register=findViewById(R.id.btn_register);
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),RegisterActivity.class);
startActivity(intent);
}
});
}
}
(3)RegisterActivity类
RegisterActivity
类是用户注册页面的Activity,主要编写用户注册页面的业务逻辑。具体代码实现如下:
![img](https://img-blog.csdnimg.cn/img_convert/bfe3f1d03033e41c0e2832eaceab1244.png)
![img](https://img-blog.csdnimg.cn/img_convert/f764e1bfc0cc260e8dcb36c602afe04c.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
leArrayListExtra("LoginUser", list);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),"登录失败,密码错误或账号不存在!",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"数据库异常",Toast.LENGTH_SHORT).show();
}
}
});
//注册按键
Button btn_register=findViewById(R.id.btn_register);
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),RegisterActivity.class);
startActivity(intent);
}
});
}
}
(3)RegisterActivity类
RegisterActivity
类是用户注册页面的Activity,主要编写用户注册页面的业务逻辑。具体代码实现如下:
[外链图片转存中...(img-mcPn8Zl4-1715418085005)]
[外链图片转存中...(img-gnIbgcxG-1715418085005)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**