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);
}

@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運行效果圖***************/
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章