SQLite和SQLiteDatabase应用

 

一、实验目的

1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。

2、实现添加用户名,爱好小例程。

二、实验要求

1、完成Android开发平台的搭建及相关配置

2、创建项目并熟悉文件目录结构

3、实现例程添加用户名,爱好实验步骤

三、实验步骤

用户登录

 

public class MainActivity extends AppCompatActivity {

    EditText edt_id,edt_pwd;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        edt_id = findViewById(R.id.edt_uid);

        edt_pwd =findViewById(R.id.edt_upwd);

        Button btn_login = findViewById(R.id.btn_login);

        //登录按键

        btn_login.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    String userId=edt_id.getText().toString();

                    String userPwd=edt_pwd.getText().toString();

                    DBHelper dbuserHelper=new DBHelper(getApplicationContext());

                    User user = dbuserHelper.userlogin(userId,userPwd);

 

                    //登录成功跳转对应类型界面

                    if(user!=null) {

                        Toast.makeText(getApplicationContext(), user.getUserId() + "登录成功", Toast.LENGTH_SHORT).show();

                        Intent intent;

                        ArrayList<User> list = new ArrayList<>();

                        list.add(user);

 

                        intent = new Intent(getApplicationContext(), UserCenterActivity.class);

                        intent.putParcelableArrayListExtra("LoginUser", list);

                        startActivity(intent);

                    }else{

                        Toast.makeText(getApplicationContext(),"登录失败,密码错误或账号不存在!",Toast.LENGTH_SHORT).show();

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                    Toast.makeText(getApplicationContext(),"数据库异常",Toast.LENGTH_SHORT).show();

                }

            }

        });

        //注册按键

        Button btn_register=findViewById(R.id.btn_register);

        btn_register.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent intent=new Intent(getApplicationContext(),RegisterActivity.class);

 

                startActivity(intent);

            }

        });

    }

}

用户注册

 

主页面:

 

关键代码

package com.liuwanwan.accountbook.activity;

 

import android.graphics.Color;

import android.support.design.widget.TabLayout;

import android.support.v4.view.ViewPager;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.Toast;

 

import com.liuwanwan.accountbook.R;

import com.liuwanwan.accountbook.adapter.HomePagerAdapter;

import com.liuwanwan.accountbook.fragment.AssetFragment;

import com.liuwanwan.accountbook.fragment.MoreFragment;

import com.liuwanwan.accountbook.fragment.RecordFragment;

import com.liuwanwan.accountbook.fragment.TableFragment;

import com.liuwanwan.accountbook.model.HomePagerInfo;

 

import org.litepal.tablemanager.Connector;

 

import java.util.ArrayList;

import java.util.List;

 

public class MainActivity extends AppCompatActivity {

    private ViewPager mVpHome;

    private TabLayout mTabLayoutHome;

 

    private final String[] TITLES = {"记账", "报表", "资产", "更多"};

    private final int[] ICONS = {R.mipmap.record, R.mipmap.table, R.mipmap.fund, R.mipmap.more};

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mVpHome = (ViewPager) findViewById(R.id.vp_home);

        mTabLayoutHome = (TabLayout) findViewById(R.id.tab_layout_home);

        mVpHome.setOffscreenPageLimit(4);

        initViewPager();

        Connector.getDatabase();

    }

 

    private void initViewPager() {

        final List<HomePagerInfo> data = new ArrayList<>();

        data.add(new HomePagerInfo(TITLES[0], new RecordFragment()));

        data.add(new HomePagerInfo(TITLES[1], new TableFragment()));

        data.add(new HomePagerInfo(TITLES[2], new AssetFragment()));

        data.add(new HomePagerInfo(TITLES[3], new MoreFragment()));

        HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), data);

        mVpHome.setAdapter(homePagerAdapter);

        mTabLayoutHome.setupWithViewPager(mVpHome);

        int normalColor = Color.parseColor("#8C8C8C");

        int selectColor = Color.parseColor("#000000");

        mTabLayoutHome.setTabTextColors(normalColor, Color.RED);

        mTabLayoutHome.setSelectedTabIndicatorColor(selectColor);

        for (int i = 0; i < 4; i++) {

            mTabLayoutHome.getTabAt(i).setIcon(ICONS[i]);

        }

    }

    private long firtTime=0;

    public void onBackPressed(){

        long seconTime=System.currentTimeMillis();

        if (seconTime-firtTime>2000){

            Toast.makeText(MainActivity.this,"再按一次退出程序",Toast.LENGTH_SHORT).show();

            firtTime=seconTime;

        }else {

            System.exit(0);

        }

    }

}}

 

 

关键代码:

package com.liuwanwan.accountbook.activity;

 

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

 

import com.liuwanwan.accountbook.MyApplication;

import com.liuwanwan.accountbook.R;

import com.liuwanwan.accountbook.adapter.ClassItemAdapter;

import com.liuwanwan.accountbook.db.Record;

import com.liuwanwan.accountbook.model.ClassItem;

 

import java.util.ArrayList;

import java.util.List;

 

 

public class ClassStatisticActivity extends AppCompatActivity {

    private ImageView ivClass;

    private TextView tvClassName, tvClassMoney;

    private ListView listView;

    private ClassItemAdapter classItemAdapter;

private List<Record> classStatisticList;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_class);

        ivClass = (ImageView) findViewById(R.id.iv_class);

        tvClassName = (TextView) findViewById(R.id.tv_classname);

        tvClassMoney = (TextView) findViewById(R.id.tv_classmoney);

        classStatisticList = (List<Record>) getIntent().getSerializableExtra("classStatisticList");

        Record r = classStatisticList.get(0);

        int classId = 0;

        String className = "";

 

        if (r.isIncome) {

            classId = MyApplication.incomeIds[r.getInOrOutType()];

            className = MyApplication.incomeTypes[r.getInOrOutType()];

        } else {

            classId = MyApplication.expenseIds[r.getInOrOutType()];

            className = MyApplication.expenseTypes[r.getInOrOutType()];

        }

 

        ivClass.setImageResource(classId);

        tvClassName.setText(className);

        listView = (ListView) findViewById(R.id.listview_class);

        updateClassStatistic();

    }

 

    private void updateClassStatistic() {

        List<ClassItem> classItemList = new ArrayList<>();

        double classMoney = 0;

        for (Record record : classStatisticList) {

            ClassItem classItem = new ClassItem(record.getRecordedTime(), record.getMoney(), record.getRecordTime());

            classItemList.add(classItem);

            classMoney += record.getMoney();

        }

        tvClassMoney.setText("¥" + classMoney);

        classItemAdapter = new ClassItemAdapter(getSupportFragmentManager(),classItemList);

        listView.setAdapter(classItemAdapter);

    }

}

运行画面截图

 

关键代码:

package com.liuwanwan.accountbook.activity;

 

import android.app.DatePickerDialog;

import android.os.Bundle;

import android.support.design.widget.FloatingActionButton;

import android.support.v7.app.AppCompatActivity;

import android.text.TextUtils;

import android.view.KeyEvent;

import android.view.View;

import android.view.WindowManager;

import android.view.inputmethod.EditorInfo;

import android.view.inputmethod.InputMethodManager;

import android.widget.AdapterView;

import android.widget.Button;

import android.widget.DatePicker;

import android.widget.EditText;

import android.widget.GridView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

 

import com.liuwanwan.accountbook.MyApplication;

import com.liuwanwan.accountbook.R;

import com.liuwanwan.accountbook.adapter.IconAdapter;

import com.liuwanwan.accountbook.db.Asset;

import com.liuwanwan.accountbook.db.Record;

import com.liuwanwan.accountbook.model.IconBean;

import com.liuwanwan.accountbook.model.MessageEvent;

import com.liuwanwan.accountbook.utils.ChooseAccountDialogFragment;

 

import org.greenrobot.eventbus.EventBus;

import org.greenrobot.eventbus.Subscribe;

import org.greenrobot.eventbus.ThreadMode;

import org.litepal.LitePal;

 

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

 

public class AddRecordActivity extends AppCompatActivity

{

    private Button mBtTitleExpense;

    private Button mBtTitleIncome;

    private Button mBtRecordDate;

    private Button mBtRecordAccount;

    private TextView mTvIsExpense;

    private EditText mEtMoney;

    private GridView mGlWrite;

    private List<IconBean> mData;

    private List<IconBean> mExpenseData;

    private List<IconBean> mIncomeData;

    private IconAdapter mIconAdapter;

    private int prePostion;

    private LinearLayout mLlInput;

    private EditText mEtDes;

    private long time;

    private String recordedDate;

    private FloatingActionButton fbDone;

    private String editY, editM, editD;

private String oldRecordAccount;

private double oldRecordMoney;

    @Override

    protected void onCreate(Bundle savedInstanceState)

{

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_write);

        time = getIntent().getLongExtra("time", 0);

 

        EventBus.getDefault().register(this);

        initView();

        Calendar c = Calendar.getInstance();

        recordedDate = getCurrentDate();

        //tvRecordDate.setText((c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH));

        initList();

        mBtTitleExpense.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view)

{

mData.get(prePostion).selected = false;

mBtTitleExpense.setEnabled(false);

mBtTitleIncome.setEnabled(true);

mTvIsExpense.setText("花钱");

mData.clear();

mData.addAll(mExpenseData);

mIconAdapter.notifyDataSetChanged();

//mLlInput.setBackgroundResource(R.color.pink);

//mEtMoney.setBackgroundResource(R.color.pink);

}

});

        mBtTitleIncome.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view)

{

mData.get(prePostion).selected = false;

mBtTitleExpense.setEnabled(true);

mBtTitleIncome.setEnabled(false);

mTvIsExpense.setText("赚钱");

mData.clear();

mData.addAll(mIncomeData);

mIconAdapter.notifyDataSetChanged();

//mLlInput.setBackgroundResource(R.color.orange);

//mEtMoney.setBackgroundResource(R.color.orange);

}

});

        mIconAdapter = new IconAdapter(mData);

        mGlWrite.setAdapter(mIconAdapter);

        mGlWrite.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> adapterView, View view, int position, long id)

{

mData.get(prePostion).selected = false;

mData.get(position).selected = true;

prePostion = position;

mIconAdapter.notifyDataSetChanged();

}

});

        fbDone.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v)

{

changeRecord();

}

});

 

        mEtMoney.setSelection(mEtMoney.getText().length());//将光标移至文字末尾

        mEtMoney.requestFocus();

        //打开软键盘

        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

        /*

        mEtMoney.setOnEditorActionListener(new TextView.OnEditorActionListener() {

@Override

public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent)

{

int textViewId = textView.getId();

if (textViewId == mEtDes.getId())

{

if (actionId == EditorInfo.IME_ACTION_NEXT)

{

return true;

}

}

if (textViewId == mEtMoney.getId())

{

if (actionId == EditorInfo.IME_ACTION_DONE)

{

mEtMoney.clearFocus();

InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

return true;

}

}

return false;

}

});*/

        mBtRecordDate.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view)

{

final Calendar c = Calendar.getInstance();

 

new DatePickerDialog(AddRecordActivity.this, new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker datePicker, int y, int m, int d)

{

if (y < c.get(Calendar.YEAR) || (y == c.get(Calendar.YEAR) && m < c.get(Calendar.MONTH)) || (y == c.get(Calendar.YEAR) && m == c.get(Calendar.MONTH) && d <= c.get(Calendar.DAY_OF_MONTH)))//选择的是过去或现在

mBtRecordDate.setText((m + 1) + "-" + d);

else//不能给未来记账

{

Toast.makeText(AddRecordActivity.this, "不能给未来记账!", Toast.LENGTH_SHORT).show();

return;

}

String mm = (m + 1) + "";

String dd = d + "";

if (m < 9)

mm = "0" + (m + 1);

if (d < 10)

dd = "0" + d;

editY = y + "";

editM = mm;

editD = dd;

recordedDate = y + mm + dd;

}

}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();

}

});

        mBtRecordAccount.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view)

{

ChooseAccountDialogFragment chooseAccountDialogFragment = ChooseAccountDialogFragment.newInstance(MyApplication.CHOOSE_ASSET);

//bottomDialogFragment.setTargetFragment(getSupportFragment(), 0);

//bottomDialogFragment.show(getChildFragmentManager(),"ShowDetaiRecord");//报错

chooseAccountDialogFragment.show(getSupportFragmentManager(), "ChooseAccount");

}

});

        initData();

    }

    private void initView()

{

        mBtTitleExpense = (Button) findViewById(R.id.bt_title_expense);

        mBtTitleIncome = (Button) findViewById(R.id.bt_title_income);

        mTvIsExpense = (TextView) findViewById(R.id.tv_is_expense);

        mEtMoney = (EditText) findViewById(R.id.et_money);

        mGlWrite = (GridView) findViewById(R.id.gl_write);

        fbDone = (FloatingActionButton) findViewById(R.id.fb_done);

        mLlInput = (LinearLayout) findViewById(R.id.ll_input);

        mBtRecordDate = (Button) findViewById(R.id.bt_recorddate);

        mBtRecordAccount = (Button)findViewById(R.id.bt_recordaccount);

        mEtDes = (EditText) findViewById(R.id.et_des);

    }

    @Subscribe(threadMode = ThreadMode.MAIN)

    public void onMessageEvent1(MessageEvent messageEvent)

{

        switch (messageEvent.getMessage())

{

            case MyApplication.CHOOSE_ASSET:

                mBtRecordAccount.setText(MyApplication.chooseAssetName);

                break;

        }

    }

 

    @Override

    public void onDestroy()

{

        super.onDestroy();

        EventBus.getDefault().unregister(this);

    }

    private String getCurrentDate()

{

        Calendar c = Calendar.getInstance();

        int m = c.get(Calendar.MONTH);

        int d = c.get(Calendar.DAY_OF_MONTH);

        String mm =(m + 1) + "";

        String dd = d + "";

        if (m < 9)

            mm = "0" + (m + 1);

        if (d < 10)

            dd = "0" + d;

        return c.get(Calendar.YEAR) + mm + dd;

    }

 

    private void initData()

{

        if (time != 0)

{

            Record record = LitePal.where("recordTime=?", time + "").findFirst(Record.class);

            if (record.isIncome)

{

                mBtTitleIncome.performClick();

            }

else

{

                mBtTitleExpense.performClick();

            }

            prePostion = record.getInOrOutType();

            mEtDes.setText(record.getNote());

oldRecordMoney = record.getMoney();

            mEtMoney.setText(record.getMoney() + "");

            mBtRecordAccount.setText(record.getAccount());

oldRecordAccount = record.getAccount();

            String temp = record.getRecordedTime();

            editY = temp.substring(0, 4);

            editM = temp.substring(4, 6);

            editD = temp.substring(6, 8);

            mBtRecordDate.setText(editM + "-" + editD);

            Calendar c = Calendar.getInstance();

            recordedDate = c.get(Calendar.YEAR) + temp.substring(4, 8);

        }

    }

 

    private void initList()

{

        mData = new ArrayList<>();

        mExpenseData = new ArrayList<>();

        mIncomeData = new ArrayList<>();

        int m = MyApplication.expenseIds.length;

        int n = MyApplication.incomeIds.length;

        for (int i = 0; i < m; i++)

{

            mExpenseData.add(new IconBean(MyApplication.expenseIds[i], MyApplication.expenseTypes[i], false));

        }

        for (int i = 0; i < n; i++)

{

            mIncomeData.add(new IconBean(MyApplication.incomeIds[i], MyApplication.incomeTypes[i], false));

        }

        mData.addAll(mExpenseData);

    }

 

    private void changeRecord()

{

        boolean isIncome = mBtTitleExpense.isEnabled();

        int type = prePostion;

        String qian = mEtMoney.getText().toString();

        if (TextUtils.isEmpty(qian))

{

            Toast.makeText(getApplicationContext(), "请输入金额", Toast.LENGTH_SHORT).show();

            return;

        }

        double money = Double.parseDouble(qian);

        if (money == 0)

{

            Toast.makeText(getApplicationContext(), "请输入非0金额", Toast.LENGTH_SHORT).show();

            return;

        }

        String des = mEtDes.getText().toString();

        //String chooseAsset=mBtRecordAccount.getText().toString();

        Calendar calender = Calendar.getInstance();

        Record record = new Record();

        record.setIncome(isIncome);

        record.setInOrOutType(type);

        record.setMoney(money);

        record.setNote(des);

String newRecordAccount=mBtRecordAccount.getText().toString();

        record.setAccount(newRecordAccount);

        if (time == 0)

{//新记录,增加

List<Asset> assetList = LitePal.where("name=?", newRecordAccount).find(Asset.class);

if (assetList != null && assetList.size() > 0 && !newRecordAccount.equals("账户"))

{

String tempYear = recordedDate.substring(0, 4);

String tempMonth=recordedDate.substring(4, 6);

String tempDay = recordedDate.substring(6, 8);

record.setRecordedTime(tempYear + tempMonth + tempDay);

record.setRecordedYear(tempYear);

record.setRecordedYearMonth(tempYear + tempMonth);

record.setRecordTime(calender.getTime().getTime());

record.save();

 

Asset asset=assetList.get(0);

asset.setMoney(asset.getMoney() - money);

asset.updateAll("name=?", newRecordAccount);

}

else

{

Toast.makeText(AddRecordActivity.this, "请先设置资产账户", Toast.LENGTH_SHORT).show();

return;

}

        }

else

{//老记录,更新

            record.setRecordedTime(editY + editM + editD);

            record.setRecordedYear(editY);

            record.setRecordedYearMonth(editY + editM);

            record.setRecordTime(calender.getTime().getTime());

            record.updateAll("recordTime=?", time + "");

 

List<Asset> assetList1 = LitePal.where("name=?", oldRecordAccount).find(Asset.class);

if (assetList1 != null && assetList1.size() > 0)

{

Asset asset=assetList1.get(0);

asset.setMoney(asset.getMoney() + oldRecordMoney);

asset.updateAll("name=?", oldRecordAccount);

}

List<Asset> assetList2 = LitePal.where("name=?", newRecordAccount).find(Asset.class);

if (assetList2 != null && assetList2.size() > 0)

{

Asset asset=assetList2.get(0);

asset.setMoney(asset.getMoney() - money);

asset.updateAll("name=?", newRecordAccount);

}

        }

 

        EventBus.getDefault().post(new MessageEvent(MyApplication.ADD_DEL_RECORD));

        finish();

    }

}

 

package com.liuwanwan.accountbook.activity;

 

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

 

import com.liuwanwan.accountbook.R;

 

public class BudgetActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_budget);

    }

}

 

posted @ 2025-05-06 22:59  艾鑫4646  阅读(16)  评论(0)    收藏  举报