实现生词本程序,并将所有生词数据存储到SQLite数据库当中。
要求:
(1)能够展示所有生词列表;
(2)能够根据用户输入的关键词搜索出相关生词列表;
(3)能够查看、编辑和删除某条生词记录;
(4)自己设计并完成程序界面;
(5)只需提交核心Java代码,界面需上传截图(不需要提交布局文件XML代码)
点击下载所有相关代码:LRF_使用Android实现生词本源码
WordDatabaseHelper.java:
package com.example.homework01wordsdir;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class WordDatabaseHelper extends SQLiteOpenHelper {
public WordDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 数据库不存在,第一次创建数据库时被自动调用,并且只被调用一次
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table WordTB(id integer primary key autoincrement,word varchar(20) unique,mean varchar(200))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Words.java:
package com.example.homework01wordsdir;
public class Words {
private int id;
private String word;
private String mean;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public String getMean() {
return mean;
}
public void setMean(String mean) {
this.mean = mean;
}
public Words() {
}
public Words(String word, String mean) {
this.word = word;
this.mean = mean;
}
}
MainActivity.java:
package com.example.homework01wordsdir.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.example.homework01wordsdir.R;
import com.example.homework01wordsdir.WordDatabaseHelper;
import com.example.homework01wordsdir.Words;
public class MainActivity extends AppCompatActivity {
private LinearLayout linearQueryWord;
private LinearLayout linearAddWord;
private LinearLayout linearSeeMyDir;
//创建数据库对象属性
public static SQLiteDatabase db;
private WordDatabaseHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件引用
findViews();
//设置监听器
setListeners();
//创建数据表
helper = new WordDatabaseHelper(this, "GlossaryDB.db", null, 1);
db = helper.getWritableDatabase();
}
private void setListeners() {
MyListener myListener = new MyListener();
linearQueryWord.setOnClickListener(myListener);
linearAddWord.setOnClickListener(myListener);
linearSeeMyDir.setOnClickListener(myListener);
}
class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.linear_queryWord:
Intent intent1 = new Intent();
intent1.setClass(MainActivity.this, QueryWordActivity.class);
startActivity(intent1);
break;
case R.id.linear_addWord:
Intent intent2 = new Intent();
intent2.setClass(MainActivity.this, AddWordActivity.class);
startActivity(intent2);
break;
case R.id.linear_seeMyDir:
Intent intent3 = new Intent();
intent3.setClass(MainActivity.this, SeeMyDirActivity.class);
startActivity(intent3);
break;
}
}
}
private void findViews() {
linearQueryWord = findViewById(R.id.linear_queryWord);
linearAddWord = findViewById(R.id.linear_addWord);
linearSeeMyDir = findViewById(R.id.linear_seeMyDir);
}
}
QueryWordActivity.java:
package com.example.homework01wordsdir.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.homework01wordsdir.R;
import com.example.homework01wordsdir.activity.MainActivity;
public class QueryWordActivity extends AppCompatActivity {
private EditText etWord;
private Button btnSearch;
private TextView tvShowResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_query_word);
findViews();
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String input = etWord.getText().toString().trim();
if (input.equals("") || input == null) {
tvShowResult.setText("请输入非空格英文字母,以确保查询结果正确!!");
} else {
String where = "word like '%" + input + "%'";
Cursor resultCursor = queryData(where);
StringBuffer resultBuffer = new StringBuffer();
while (resultCursor.moveToNext()) {
String word = resultCursor.getString(resultCursor.getColumnIndex("word"));
String mean = resultCursor.getString(resultCursor.getColumnIndex("mean"));
resultBuffer.append(word + "\n" + mean + "\n");
}
if(resultBuffer.toString().trim().length()==0){
tvShowResult.setText("未搜索到您想要查询生词的相关内容!");
}else {
tvShowResult.setText(resultBuffer.toString());
}
}
}
});
}
private void findViews() {
etWord = findViewById(R.id.et_word);
btnSearch = findViewById(R.id.btn_search);
tvShowResult = findViewById(R.id.tv_showResult);
}
private Cursor queryData(String where) {
return MainActivity.db.query("WordTB", null, where, null, null, null, null);
}
}
AddWordActivity.java:
package com.example.homework01wordsdir.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.homework01wordsdir.R;
import com.example.homework01wordsdir.Words;
public class AddWordActivity extends AppCompatActivity {
private EditText etWordAdd;
private EditText etMeanAdd;
private Button btnSubmitAdd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_word);
findViews();
btnSubmitAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String wordAdd = etWordAdd.getText().toString().trim();
String meanAdd = etMeanAdd.getText().toString().trim();
if(wordAdd.length() == 0 || meanAdd.length() == 0){
showAlertDialog();
}else{
Words word = new Words(wordAdd,meanAdd);
int i = insertWord(word);
if(i > 0){
Toast.makeText(AddWordActivity.this,"添加生词成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(AddWordActivity.this, MainActivity.class);
startActivity(intent);
}else{
showAlert();
}
}
}
});
}
private int insertWord(Words word) {
ContentValues contentValues = new ContentValues();
contentValues.put("word",word.getWord());
contentValues.put("mean",word.getMean());
return (int)MainActivity.db.insert("WordTB",null,contentValues);
}
private void showAlert() {
new AlertDialog.Builder(AddWordActivity.this).setTitle("温馨提示")
.setMessage("您已添加过该生词,添加生词失败!")
.setPositiveButton("确定",null)
.create().show();
}
private void showAlertDialog() {
new AlertDialog.Builder(AddWordActivity.this).setTitle("温馨提示")
.setMessage("请确保您已正确输入需要添加的生词和该生词的意思!")
.setPositiveButton("确定",null)
.create().show();
}
private void findViews() {
etWordAdd = findViewById(R.id.et_wordAdd);
etMeanAdd = findViewById(R.id.et_meanAdd);
btnSubmitAdd = findViewById(R.id.btn_submitAdd);
}
}
SeeMyDirActivity.java:
package com.example.homework01wordsdir.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import com.example.homework01wordsdir.R;
import com.example.homework01wordsdir.Words;
import com.example.homework01wordsdir.WordsAdapter;
import com.example.homework01wordsdir.activity.MainActivity;
import java.util.ArrayList;
import java.util.List;
public class SeeMyDirActivity extends AppCompatActivity {
private List<Words> wordsList = new ArrayList<>();
private StringBuffer buffer = new StringBuffer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_see_mydir);
Cursor cursor = queryAllData();
initData(cursor);
initView();
}
private void initData(Cursor cursor) {
while (cursor.moveToNext()) {
String word = cursor.getString(cursor.getColumnIndex("word"));
String mean = cursor.getString(cursor.getColumnIndex("mean"));
buffer.append(word + ":" + mean + "/");
}
if(buffer.toString().trim().length() != 0){
String[] strings = buffer.toString().split("/");
for (int i = 0; i < strings.length; ++i) {
String[] words = strings[i].split(":");
for (int j = 0; j < words.length; ++j) {
if (j % 2 == 0) {
Words word = new Words(words[j], words[j + 1]);
wordsList.add(word);
}
}
}
}
}
public void initView() {
WordsAdapter wordsAdapter = new WordsAdapter(this, wordsList, R.layout.words_list);
ListView wordListView = findViewById(R.id.lv_showWords);
wordListView.setAdapter(wordsAdapter);
}
public Cursor queryAllData() {
return MainActivity.db.query("WordTB", null, null, null, null, null, null);
}
}
WordsAdapter.java:
package com.example.homework01wordsdir;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.homework01wordsdir.activity.EditWordActivity;
import com.example.homework01wordsdir.activity.MainActivity;
import com.example.homework01wordsdir.activity.WordInfoActivity;
import java.util.ArrayList;
import java.util.List;
public class WordsAdapter extends BaseAdapter {
private Context mContext;
private List<Words> words = new ArrayList<Words>();
private int itemLayoutRes;
public WordsAdapter(Context mContext, List<Words> words, int itemLayoutRes) {
this.mContext = mContext;
this.words = words;
this.itemLayoutRes = itemLayoutRes;
}
/*获得数据条数*/
@Override
public int getCount() {
if(words != null){
return words.size();
}
return 0;
}
/*获取每个item显示的数据对象*/
@Override
public Object getItem(int position) {
if(words != null){
return words.get(position);
}
return null;
}
/*获取每个item的id值*/
@Override
public long getItemId(int position) {
return position;
}
/*获取item的视图对象*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//convertView每个item的视图对象
//加载item的布局文件
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);//布局填充器
convertView = inflater.inflate(itemLayoutRes, null);
}
//获取item中的控件引用
final TextView tvWords = convertView.findViewById(R.id.tv_words);
TextView tvMean = convertView.findViewById(R.id.tv_mean);
Button btnSee = convertView.findViewById(R.id.btn_see);
Button btnEdit = convertView.findViewById(R.id.btn_edit);
Button btnDelete = convertView.findViewById(R.id.btn_delete);
//设置控件内容
tvWords.setText(words.get(position).getWord());
tvMean.setText(words.get(position).getMean());
//设置控件事件监听器
btnSee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String word = tvWords.getText().toString();
if(word != null && !word.equals("")){
Intent intent = new Intent();
intent.setClass(mContext, WordInfoActivity.class);
intent.putExtra("word",word);
mContext.startActivity(intent);
}else{
Toast.makeText(mContext.getApplicationContext(),"未获取到单词!",Toast.LENGTH_SHORT).show();
}
}
});
btnEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String word = tvWords.getText().toString();
if(word != null && !word.equals("")){
Intent intent = new Intent();
intent.setClass(mContext, EditWordActivity.class);
intent.putExtra("word",word);
mContext.startActivity(intent);
}else{
Toast.makeText(mContext.getApplicationContext(),"未获取到单词!",Toast.LENGTH_SHORT).show();
}
}
});
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String word = tvWords.getText().toString();
if(word != null && !word.equals("")){
String where = "word='" + word + "'";
int i = dropWord(where);
if(i > 0){
Intent intent = new Intent();
intent.setClass(mContext, MainActivity.class);
mContext.startActivity(intent);
Toast.makeText(mContext.getApplicationContext(),"删除成功!",Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(mContext.getApplicationContext(),"未获取到单词!",Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
private int dropWord(String where) {
return MainActivity.db.delete("WordTB",where,null);
}
}
WordInfoActivity.java:
package com.example.homework01wordsdir.activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.homework01wordsdir.R;
import com.example.homework01wordsdir.activity.MainActivity;
public class WordInfoActivity extends AppCompatActivity {
private TextView tvWordInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_word_info);
//获取控件
tvWordInfo = findViewById(R.id.tv_wordInfo);
Intent request = getIntent();
String word = request.getStringExtra("word");
String where = "word='"+word+"'";
Cursor cursor = queryWordInfo(where);
showWordInfo(cursor);
}
//将查询到的数据显示在界面
private void showWordInfo(Cursor cursor) {
StringBuffer buffer = new StringBuffer();
while(cursor.moveToNext()){
String word = cursor.getString(cursor.getColumnIndex("word"));
String mean = cursor.getString(cursor.getColumnIndex("mean"));
buffer.append("生词: " + word + "\n\n意思:\n" + mean+"\n");
tvWordInfo.setText(buffer.toString());
}
}
//根据单词拼写来查询该单词的详细信息
private Cursor queryWordInfo(String where) {
return MainActivity.db.query("WordTB", null,where,null, null,null,null);
}
}
EditWordActivity.java:
package com.example.homework01wordsdir.activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.homework01wordsdir.R;
public class EditWordActivity extends AppCompatActivity {
private EditText etWordChange;
private EditText etMeanChange;
private Button btnSubmitChange;
private int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_word);
findViews();
Intent request = getIntent();
String word = request.getStringExtra("word");
String where = "word='"+word+"'";
Cursor cursor = queryWordInfo(where);
while(cursor.moveToNext()){
id = cursor.getInt(cursor.getColumnIndex("id"));
}
btnSubmitChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String wordChange = etWordChange.getText().toString().trim();
String meanChange = etMeanChange.getText().toString().trim();
if(wordChange.length() != 0 && meanChange.length() != 0){
int i = updateData(id,wordChange,meanChange);
if(i > 0){
Intent intent = new Intent();
intent.setClass(EditWordActivity.this, MainActivity.class);
startActivity(intent);
Toast.makeText(EditWordActivity.this,"编辑生词成功!",Toast.LENGTH_SHORT).show();
}else{
showFailAlertDialog();
}
}else{
showAlertDialog();
}
}
});
}
private void showFailAlertDialog() {
new AlertDialog.Builder(EditWordActivity.this).setTitle("温馨提示")
.setMessage("修改生词失败!")
.setPositiveButton("确定",null)
.create().show();
}
private void showAlertDialog() {
new AlertDialog.Builder(EditWordActivity.this).setTitle("温馨提示")
.setMessage("请确保您已正确输入修改后的生词和该生词的意思!")
.setPositiveButton("确定",null)
.create().show();
}
private int updateData(int id,String wordChange,String meanChange) {
String where = "id=" + id;
//使用封装更新的数据
ContentValues cv = new ContentValues();
cv.put("word",wordChange);
cv.put("mean",meanChange);
return MainActivity.db.update("WordTB",cv,where,null);
}
private void findViews() {
etWordChange = findViewById(R.id.et_wordChange);
etMeanChange = findViewById(R.id.et_meanChange);
btnSubmitChange = findViewById(R.id.btn_submitChange);
}
//根据单词拼写来查询该单词的详细信息
private Cursor queryWordInfo(String where) {
return MainActivity.db.query("WordTB", null,where,null, null,null,null);
}
}
首页显示的界面:
搜索单词/查询单词 界面:
(当只输入空格或者没有任何输入时,界面显示)
(当用户输入某关键词,且查询到相关生词结果时的界面)
(当用户输入某关键词,但查询不到相关结果时的界面显示)
添加生词界面:
(当用户添加的生词已被添加过时,显示的界面)
(当未输入生词或该生词意思,点击添加按钮时的界面显示)
(当生词添加成功时的界面显示)
展示所有生词列表:
(当用户未添加任何生词时,界面只显示上方标题)
查看某一生词:
编辑某生词:
(当未输入生词或该生词意思,点击提交按钮时的界面显示)
(当编辑成功时,界面显示)
删除某生词记录:
(当点击某生词对应的删除按钮,删除成功后的界面显示)