数据库实现一个轻量的背单词APP


在使用背单词APP的过程中,我发现我就没专心背单词,而是想着:咦,这功能可以!唉?这个地方好像有点小BUG!这里为啥不加点这个功能?那里为啥不加点那个功能?然后我就点开了我的AndroidStudio,开始了接来下的编码之旅!(本文持续更新,感兴趣的小伙伴可收藏一波)

项目地址(GitHub):https://github.com/YJX666666/MyDictionary

总体功能目标:
前期功能:

添加单词:能够添加单词

词库管理:能显示词库所有单词、能删除以及修改单词

选择模式:两种模式(中 - 英 & 英 - 中),选项中有一个正确答案以及三个非正确答案,选择正确和不正确都有相应提示

填空模式:两种模式(中 - 英 & 英 - 中),填写正确和不正确都有相应提示

后期功能:

词库选择:软件内自带几种常用的词库,如四六级等等,选择后添加进当前词库

背诵记录:可以查看单词背诵情况,如:单词出现次数、正确次数、错误次数

智能化:通过背诵记录来智能筛选背诵的单词,如:更多地出现正确率低的单词以加深记忆

大致思路:

利用数据库来保存单词,每次添加单词就直接添加进数据库,选择题是获取四组数据,然后选一组作为当前的主角(当前考核的单词),其余三组作为非正确答案放在按钮上,填空题则比较简单,随机选取一组数据,然后给出单词(或翻译),让你在输入框中填写答案。后期功能思路暂时没有考虑,先把前期功能做完!

当前效果图:

在这里插入图片描述
在这里插入图片描述

开始编码:
词库:

先写一个SQWordsHelps继承自SQLiteOpenHelper,这里定义两个数据(WORD 和 CHINESE)

public class SQWordsHelper extends SQLiteOpenHelper {
   
    public static final String WORD = "word";
    public static final String DB_NAME = WORD + "s.db";
    public static final String TABLE_NAME = WORD + "s";
    public static final String CHINESE = "chinese";
    
    public SQWordsHelper(Context context) {
   
        super(context, DB_NAME, null, 1);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
   
        db.execSQL("create table " + TABLE_NAME + "(" + WORD + " text," + CHINESE + " text)");
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   
    }
    
}

然后是添加数据的功能,也就是数据库中的 增

XML,Button我用的自己自定义的Button(文末符代码)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <EditText
        android:id="@+id/edit_english"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:background="@drawable/edit_stroke"
        android:gravity="center"
        android:hint="@string/str_english"
        android:padding="10dp"
        android:singleLine="true"
        android:textSize="22sp" />

    <EditText
        android:id="@+id/edit_chinese"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20sp"
        android:layout_marginRight="30dp"
        android:background="@drawable/edit_stroke"
        android:gravity="center"
        android:hint="@string/str_chinese"
        android:padding="10dp"
        android:singleLine="true"
        android:textSize="22sp" />

    <com.yjx.androidword.MyView.MyFirstButton
        android:id="@+id/btn_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20sp"
        android:layout_marginRight="30dp"
        android:text="@string/str_addwords" />

</LinearLayout>

Java,BaseActivity是我写的基类(文末符代码)

点击按钮后进行判断,如果两个输入框中有空的则无反应(可以写一个提示),都不为空则调用插入数据的方法(initSQLiteData())

补充一个小知识点:数据库的 .insert() 方法是有返回值的,当返回 -1 时则为插入数据失败,返回其他则为插入数据成功(返回值是新插入数据所在的行数),这样我们就可以通过返回值来判断并提示用户插入结果

public class AddWordsActivity extends BaseActivity {
   
    private android.widget.EditText mEditEnglish;
    private android.widget.EditText mEditChinese;
    private android.widget.Button mBtnAdd;

    SQWordsHelper mSQHelper;
    SQLiteDatabase mSQLiteDatabase;
    ContentValues mContentValues;

    @Override
    protected void initData() {
   
        mSQHelper = new SQWordsHelper(mContext);
        mSQLiteDatabase = mSQHelper.getWritableDatabase();

        mBtnAdd.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   

                String english = mEditEnglish.getText().toString();
                String chinese = mEditChinese.getText().toString();

                if (!TextUtils.isEmpty(english) && !TextUtils.isEmpty(chinese)) {
   
                    initSQLiteData(english, chinese);
                }

            }
        });

    }

    private void initSQLiteData(String english, String chinese) {
   
        mContentValues = new ContentValues();
        mContentValues.put(SQWordsHelper.WORD, english);
        mContentValues.put(SQWordsHelper.CHINESE, chinese);
        if (mSQLiteDatabase.insert(SQWordsHelper.TABLE_NAME, null, mContentValues) == -1) {
   
            Toast.makeText(mContext, "添加失败!", Toast.LENGTH_SHORT).show();
        } else {
   
            Toast.makeText(mContext, "添加成功!", Toast.LENGTH_SHORT).show();
            mEditEnglish.setText("");
            mEditChinese.setText("");
        }
    }

    @Override
    protected int initLayout() {
   
        return R.layout.addwords;
    }

    @Override
    protected void initView() {
   
        mEditEnglish = findViewById(R.id.edit_english);
        mEditChinese = findViewById(R.id.edit_chinese);
        mBtnAdd = findViewById(R.id.btn_add);
    }
}
选择题:

主体是很简单的一个TextView加上四个Button的布局,然后在按钮的右下角放了一个小一点的Buton,用来获取下一个单词(当然也可以做成选完直接换的那种,不过那种感觉不如这种好),最下面是一个 “掌握了单词” 的TextView,有时候背单词遇到那种已经背的特别熟的单词,就可以通过这种方式直接在背单词的时候删掉,而不是去词库删。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值