实现功能:
 1:先将数据添加到数据库中(SQLite)
 2: 使用RecyclerView将数据库中的数据展示出来
 //备注:带加号的ImageButton用于添加数据,带勾的ImageButton用于获取数据并展示
 //先按带加号的在按带勾的
 第一步建立一个实体类Event
 代码如下:
 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; } 
}
 第二步建立一个MyHelper类用于继承SQLiteOpenHelper类
 代码如下:
 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); } 
}
 第三步:建立Dao类用于实现插入功能
 代码如下:
 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, “数据插入失败!”);
 else
 Log.i(TAG, “数据插入成功!”+RowId);
 DB.close();
 }
} 
}
 第四步:建立一个recyclerview_item.xml用于与Recyclerview适配器匹配
 效果图如下:
代码如下:
 <?xml version="1.0" encoding="utf-8"?> 
 第五步:创建一个MyRecyclerView类用于继承RecyclerView.Adapter适配器 代码如下: public class 
MyRecyclerView extends RecyclerView.Adapter
}
 第六步:建立一个AddThing活动用于获取输入的数据和插入数据库中
 AddThing.java代码如下:
 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("支付")) { MoneyType = 1; } else { MoneyType = 0; } 
} }); btn_Submit.setOnClickListener(new View.OnClickListener() { @Override 
public void onClick(View v) { dao = new Dao(AddThing.this);//创建数据库和表 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,"不能为空",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文件如下:
 效果图如下:
 //备注:RadioGroup暂未使用,到后面可以统计一个月或者更长时间的的收入或者花费的金额
 代码如下:
 <?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="支付"/> <RadioButton 
android:id="@+id/InCome" android:layout_width="match_parent" 
android:layout_height="wrap_content" android:text="收入"/> </RadioGroup> 
</LinearLayout> <TextView android:id="@+id/TipsTitle" 
android:layout_width="match_parent" android:layout_height="wrap_content" 
android:text="请输入主题:" 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="请选择时间:" 
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="请输入金额:" 
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"/> 
第七步:接收来自数据库中的数据并使用RecyclerView控件展示 MainActivity.java中的代码如下: 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); //绑定适配器 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,"内容不能为空",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文件如下:
 效果图如下:
 //备注:带加号的ImageButton用于添加数据,带勾的ImageButton用于获取数据并展示
 //先按带加号的在按带勾的
 代码如下:
 <?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”/>
/所以代码到这里已经完结,以下为AVD运行效果图***************/