Android————一个简单记账本(Bookkeeping)
实现功能:
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);}@Overridepublic 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);
}
@Overridepublic 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"?>
}
第六步:建立一个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;
@Overrideprotected 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!"); } });}@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { editTime.setText(year + "-"+ monthOfYear+ "-"+ dayOfMonth+ "");}
}
activity_add_thing.xml文件如下:
效果图如下:
//备注:RadioGroup暂未使用,到后面可以统计一个月或者更长时间的的收入或者花费的金额
代码如下:
第七步:接收来自数据库中的数据并使用RecyclerView控件展示 MainActivity.java中的代码如下: public class MainActivity extends AppCompatActivity { private RecyclerView Recyclerview; private ImageButton imageButton,imageButtonGet; private MyRecyclerView adapter; private List EventList = new ArrayList<>(); @Overrideprotected 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用于获取数据并展示
//先按带加号的在按带勾的
代码如下:
android:id="@+id/EventDisplayInterface"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”/>
/所以代码到这里已经完结,以下为AVD运行效果图***************/
更多相关文章
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- python起点网月票榜字体反爬案例
- android之ContentResolver与ContentProvider
- Android(安卓)内核源代码交叉编译(创建自己的模拟器内核,哈哈终于
- 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载
- #Android源代码#android:onClick属性的底层调用
- Android应用程序的Java数据更新和UI同步改变
- Android
- android TextView添加滚动条