Realize function :
1: First add the data to the database (SQLite)
2: use RecyclerView Display the data in the database
// remarks : Plus sign ImageButton Used to add data , Hooked ImageButton Used to obtain data and display
// Press the plus sign first and then the tick
The first step is to create an entity class Event
The code is as follows :
public class Event {
private String Title;
private String Time;
private double Money;
public Event(){
} public Event(String Title, String Time, double Money) { this.Title = Title;
this.Time = Time; this.Money = Money; } public String getTitle() { return
Title; } public String getTime() { return Time; } public double getMoney() {
return Money; } public void setTitle(String Title) { this.Title = Title; }
public void setTime(String Time) { this.Time = Time; } public void
setMoney(double Money) { this.Money = Money; }
}
The second step is to establish a MyHelper Class for inheritance SQLiteOpenHelper class
The code is as follows :
public class MyHelper extends SQLiteOpenHelper {
public static final String DataBaseName = “Bookkeeping.db”;
public static final SQLiteDatabase.CursorFactory factory = null;
public static final int version = 1;
public static final String Title = "Title"; public static final String Time =
"Time"; public static final String Money = "Money"; public static final String
TableName = "BookkeepingTable"; public MyHelper(@Nullable Context context) {
super(context, DataBaseName, factory, version); } @Override public void
onCreate(SQLiteDatabase db) { String sql = "create table "+ TableName +" (
"+Title+" varchar(20) primary key, "+Time+" varchar(20), "+Money+" Double);";
// String sql = “create table BookkeepingTable (”
// + "Title text primary key, "
// + "Time text, "
// + “Money double)”;
db.execSQL(sql);
}
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) { db.execSQL("drop table if exists "+TableName); onCreate(db); }
}
Step 3 : establish Dao Class is used to implement the insertion function
The code is as follows :
public class Dao {
public static final String TAG = “Bookkeeping”;
private SQLiteDatabase DB;
private MyHelper helper;
public Dao(Context context){
helper = new MyHelper(context);
}
public void Insert(Event event){
DB = helper.getReadableDatabase();
if (DB.isOpen())
{
ContentValues values = new ContentValues();
values.put(MyHelper.Title,event.getTitle());
values.put(MyHelper.Time,event.getTime());
values.put(MyHelper.Money,event.getMoney());
long RowId = DB.insert(MyHelper.TableName,null,values);
if(RowId == -1)
Log.i(TAG, “ Data insertion failed !”);
else
Log.i(TAG, “ Data insertion succeeded !”+RowId);
DB.close();
}
}
}
Step 4 : Build a recyclerview_item.xml Used with Recyclerview Adapter matching
The renderings are as follows :

The code is as follows :
<?xml version="1.0" encoding="utf-8"?>

Step 5 : Create a MyRecyclerView Class for inheritance RecyclerView.Adapter Adapter The code is as follows : public class
MyRecyclerView extends RecyclerView.Adapter
}
Step 6 : Build a AddThing Activities are used to get input data and insert it into the database
AddThing.java The code is as follows :
public class AddThing extends AppCompatActivity implements
DatePicker.OnDateChangedListener{
private RadioGroup Group;
private RadioButton Pay,InCome;
private DatePicker datePicker;
private TextView TipsTitle,TipsTime,TipsMoney,TipsMoneyType;
private EditText editTitle,editTime,editMoney;
private Button btn_Submit;
public static int MoneyType = 0;
public static String DatePickerTime = null;
public static String Title = null;
public static String Time = null;
public static double Money = 0;
Dao dao = null;
Event event = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_thing); btn_Submit = (Button)
findViewById(R.id.submit); datePicker = (DatePicker)
findViewById(R.id.addThing); Group = (RadioGroup) findViewById(R.id.Group); Pay
= (RadioButton) findViewById(R.id.Pay); InCome = (RadioButton)
findViewById(R.id.InCome); TipsMoneyType = (TextView)
findViewById(R.id.TipsMoneyType); TipsTitle = (TextView)
findViewById(R.id.TipsTitle); TipsTime = (TextView)
findViewById(R.id.TipsTime); TipsMoney = (TextView)
findViewById(R.id.TipsMoney); editTitle = (EditText)
findViewById(R.id.editTitle); editTime = (EditText)
findViewById(R.id.editTime); editMoney = (EditText)
findViewById(R.id.editMoney); Calendar calendar = Calendar.getInstance(); int
year = calendar.get(Calendar.YEAR); int monthOfYear =
calendar.get(Calendar.MONTH); int dayOfMonth =
calendar.get(Calendar.DAY_OF_MONTH); datePicker.init(year, monthOfYear,
dayOfMonth, this); Group.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() { @Override public void
onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton =
(RadioButton) group.findViewById(checkedId); if
(radioButton.getText().equals(" payment ")) { MoneyType = 1; } else { MoneyType = 0; }
} }); btn_Submit.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { dao = new Dao(AddThing.this);// Create databases and tables Title =
editTitle.getText().toString().trim(); Time = editTime.getText().toString();
try { Money = Double.valueOf(editMoney.getText().toString()); } catch
(NumberFormatException e) { e.printStackTrace(); } if ("".equals(Title)) {
Toast.makeText(AddThing.this," Cannot be empty ",Toast.LENGTH_SHORT).show(); return; }
dao.Insert(new Event(Title,Time,Money)); Log.d(Dao.TAG,"succees!"); } }); }
@Override public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) { editTime.setText(year + "-"+ monthOfYear+ "-"+ dayOfMonth+
""); }
}
activity_add_thing.xml The documents are as follows :
The renderings are as follows :

// remarks :RadioGroup Not used yet , Later, you can count the income or amount spent for a month or more
The code is as follows :
<?xml version="1.0" encoding="utf-8"?>

<RadioGroup android:id="@+id/Group" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_marginLeft="100dp">
<RadioButton android:id="@+id/Pay" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text=" payment "/> <RadioButton
android:id="@+id/InCome" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text=" income "/> </RadioGroup>
</LinearLayout> <TextView android:id="@+id/TipsTitle"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:text=" Please enter a theme :" android:layout_marginTop="120dp"/> <EditText
android:id="@+id/editTitle" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="Please input title:"
android:layout_marginLeft="90dp" android:layout_marginTop="105dp"/> <TextView
android:id="@+id/TipsTime" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text=" Please select a time :"
android:layout_below="@id/TipsTitle" android:layout_marginTop="50dp"/>
<EditText android:id="@+id/editTime" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="Please choose time:"
android:layout_below="@id/editTitle" android:layout_marginTop="23dp"
android:layout_marginLeft="80dp"/> <DatePicker android:id="@+id/addThing"
android:layout_width="match_parent" android:layout_height="100dp"
android:calendarViewShown="false" android:spinnersShown="true"
android:datePickerMode="spinner" android:headerBackground="#ffffff"
android:layout_below="@id/editTime" android:layout_marginTop="20dp"/> <TextView
android:id="@+id/TipsMoney" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint=" Please enter amount :"
android:layout_marginTop="20dp" android:layout_below="@id/addThing"/> <EditText
android:id="@+id/editMoney" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="Please input money:"
android:layout_below="@id/addThing" android:layout_marginLeft="80dp"
android:layout_marginTop="3dp"/> <Button android:id="@+id/submit"
android:layout_height="wrap_content" android:layout_width="100dp"
android:text="Submit" android:layout_below="@id/editMoney"
android:textAllCaps="false" android:layout_marginTop="80dp"
android:gravity="center" android:layout_marginLeft="150dp"/>
Step 7 : Receive data from the database and use RecyclerView Control display MainActivity.java The codes in are as follows : public class
MainActivity extends AppCompatActivity { private RecyclerView Recyclerview;
private ImageButton imageButton,imageButtonGet; private MyRecyclerView adapter;
private List EventList = new ArrayList<>();@Override protected void
onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Recyclerview = (RecyclerView)
findViewById(R.id.EventDisplayInterface); imageButton = (ImageButton)
findViewById(R.id.AddButton); imageButtonGet = (ImageButton)
findViewById(R.id.getInformation); // Binder Adapter LinearLayoutManager manager = new
LinearLayoutManager(MainActivity.this); Recyclerview.setLayoutManager(manager);
adapter = new MyRecyclerView(EventList); Recyclerview.setAdapter(adapter);
imageButton.setOnClickListener(new View.OnClickListener() { @Override public
void onClick(View v) { Intent intent = new
Intent(MainActivity.this,AddThing.class); startActivity(intent); } });
imageButtonGet.setOnClickListener(new View.OnClickListener() { Event event =
new Event(); @Override public void onClick(View v) { String Title =
AddThing.Title; String Time = AddThing.Time; double Money = AddThing.Money; if
( ("".equals(Title)) && ( "".equals(Time))) {
Toast.makeText(MainActivity.this," Content cannot be empty ",Toast.LENGTH_SHORT).show(); } else {
event = new Event(Title, Time, Money); EventList.add(event);
adapter.notifyItemChanged(EventList.size() - 1);
Recyclerview.scrollToPosition(EventList.size() - 1);
Toast.makeText(MainActivity.this,"111111111",Toast.LENGTH_SHORT).show(); } }
}); }
}
activity_main.xml The documents are as follows :
The renderings are as follows :

// remarks : Plus sign ImageButton Used to add data , Hooked ImageButton Used to obtain data and display
// Press the plus sign first and then the tick
The code is as follows :
<?xml version="1.0" encoding="utf-8"?>

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/EventDisplayInterface"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”/>

/ So the code is over here , The following is AVD Operation effect diagram ***************/

Technology