Android第四次做業

一、團隊成員:java

李凌龍 161  學號:1600802015  博客:http://www.cnblogs.com/Trip1eL/git

李   成  161  學號:1600802013 博客:http://www.cnblogs.com/lckzy/ 數據庫

趙澤泓  162  學號:1600802070 博客:http://www.cnblogs.com/magicm37/網絡

二、APK 連接: 數據庫設計

https://coding.net/u/Trip1eL/p/EasyCashBook/git/raw/master/EasyCashBook.apkide

三、做業代碼連接:佈局

https://coding.net/u/Trip1eL/p/EasyCashBook/git優化

四、介紹團隊項目this

  演示視頻:https://coding.net/u/Trip1eL/p/EasyCashBook/git/raw/master/SVID_20190104_104434_1.mp4spa

  
  4.1 團隊項目的整體效果截圖

  

4.2 實現的功能及其效果的描述

  4.2.1新建某日消費記錄並插入多條信息

    

  4.2.2保存在本地SQLite數據庫 經過ListView展現在主界面

    

  4.2.3對已記帳目進行修改

  

  4.2.4設置記帳日期

  

五、項目關鍵代碼

 

  5.1建立數據庫

public class CashBookDataBase extends SQLiteOpenHelper {

    private static final String CREATE_TABLE_CASHBOOK = "create table cashbook (" +
            "id integer primary key autoincrement," +
            "date integer," +
            "name text," +
            "price text)";

    public CashBookDataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_CASHBOOK);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public void insertData(long date, String name, String price) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("insert into cashbook (date, name, price) values (?, ?, ?)", new Object[]{date, name, price});
    }

    public Cursor getDateData() {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("select date from cashbook group by date", null);
    }

    public Cursor getAllDataByDate(long Date) {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("select * from cashbook where date = ? order by date asc", new String[]{String.valueOf(Date)});
    }

    public Cursor getData(long date) {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("select * from cashbook where date >= ? order by date asc", new String[]{String.valueOf(date)});
    }

    public void deleteData(long date) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("delete from cashbook where date = ?", new String[]{String.valueOf(date)});
    }
}

  5.2 Listview(實現顯示和編輯功能前提)

 

public CashBookListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(getContext(), this);
        setOnTouchListener(this);
    }

    @Override
    public boolean onDown(MotionEvent motionEvent) {
        if (!bIsDeleteBtnShow) {
            mItemPosition = pointToPosition((int)motionEvent.getX(), (int)motionEvent.getY());
        }
        return false;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        if (!bIsDeleteBtnShow && Math.abs(v) > Math.abs(v1)) {
            mBtnView = LayoutInflater.from(getContext()).inflate(R.layout.layout, null);
            mBtnView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    mItemLayout.removeView(mBtnView);
                    mBtnView = null;
                    bIsDeleteBtnShow = false;

                }
            });
            mItemLayout = (ViewGroup) getChildAt(mItemPosition - getFirstVisiblePosition());
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
            mItemLayout.addView(mBtnView, layoutParams);
            bIsDeleteBtnShow = true;
        }
        return false;
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (bIsDeleteBtnShow) {
            mItemLayout.removeView(mBtnView);
            bIsDeleteBtnShow = false;
            mBtnView = null;
            return false;
        } else {
            return mGestureDetector.onTouchEvent(motionEvent);
        }
    }
}

5.3

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == 0 && data != null) {
            List<String> name = (List<String>) data.getSerializableExtra("name");
            List<String> price = (List<String>) data.getSerializableExtra("price");
            long date;
            int numName = name.size();
            int numPrice = price.size();
            long date_tmp = data.getLongExtra("date", -1);
            if (date_tmp != -1) {
                date = date_tmp;
                mDataBaseHelper.deleteData(date);
            } else {
                date = System.currentTimeMillis();
            }
            int i, j;
            i = (numName >= numPrice ? numName : numPrice);
            for (j = 0; j < i; j++) {
                mDataBaseHelper.insertData(date, name.get(j), price.get(j));
            }
            updateDataFromDB();
        }
    }

六、項目對比

 

一、李怡龍小組:這個項目就是存儲用戶信息的一個項目,經過用戶的註冊,來存儲用戶的信息,優勢就是簡單明瞭實用性強,功能實現完整且精確,存在缺點有時會跳BUG

2、韓璐組音樂播放器:實現了音樂播放器的基本功能,但存在界面優化不足的缺點,對模擬器要求較高。

3、周麗麗組音樂播放器:一樣實現了音樂播放器的基本功能,功能實現完整但界面不夠美觀,優化不夠。對高版本API有閃退的現象。

4、毛建小組:所作的校園頭條,實現了查看新聞,用列表展現新聞的功能採用了兩個界面,但界面佈局感受有些怪異,沒有實現實時更新新聞的功能,相關的功能塊也不能跳轉。

5、馬進財小組:界面基本實現,但點功能塊時會出現閃退現象。

七、問題及解決方法

 

  7.1數據庫沒法更新數據:1600802015李凌龍

    起初設計完成後沒有在MainActivity.java中的onCreat方法中啓動數據庫致使一直沒法開啓App啓動數據庫 後續在代碼中添加代碼後解決

mDataBaseHelper = ((CashBookApplication)getApplication()).getDataBaseHelper();
        updateDataFromDB();

  7.2ListView顯示帳目問題:1600802015李凌龍

    查閱網絡資料 理解了ListView工做原理最後解決以下

public View getView(int position, View convertView, ViewGroup parent) {
        CashBook cashBook = getItem(position);
        View view;
        ViewHolder viewHolder;
        if (convertView == null) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.date = (TextView) view.findViewById(R.id.txt_date);
            viewHolder.content = (TextView) view.findViewById(R.id.txt_content);
            view.setTag(viewHolder);
        } else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.date.setText(StampToDate.StampConvertToDate(cashBook.getDate()));
        viewHolder.content.setText(cashBook.getContent());
        return view;
    }

    class ViewHolder {
        TextView date;
        TextView content;
    }

  7.3 如何實現日期:1600802013李成

    初期是打算設計爲手動輸入日期,後來查閱Google官方資料 官方有相關組件 因而最終選擇直接利用組件

    

switch (view.getId()) {
            case R.id.btn_datepicker:
                DatePickerDialog dialog = new DatePickerDialog(AddCashBookActivity.this, 0, dateSetListener,
                        Calendar.getInstance().get(Calendar.YEAR),
                        Calendar.getInstance().get(Calendar.MONTH),
                        Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
                dialog.show();
                break;
            default:
                break;
        }

 

  7.4 如何插入多條數據:1600802013李成

    在建立時把數據放在同一行 顯示時用逗號分開

 

  7.5 編輯數據趙澤泓  1600802070

    點擊ListView中顯示的數據 將數據所在的數據打開在建立的頁面裏 進行編輯 從新寫入數據庫

  7.6 建立功能趙澤泓  1600802070

    起初沒法直接寫入數據庫 最後經過在DBHelper中修改insertData方法直接把數據插入數據庫

    

 public void insertData(long date, String name, String price) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("insert into cashbook (date, name, price) values (?, ?, ?)", new Object[]{date, name, price});
    }

 

8分工安排

 

姓名 分工 工做比例 分數
李凌龍 數據庫設計、UI設計 34% 10
李成 數據功能、按鍵功能 33% 10
趙澤泓  編輯,建立功能實現 33% 10
相關文章
相關標籤/搜索