Android项目实践(二)——日记本APP

Android项目实践(二)——日记本APP,第1张

关于Android制作日记本APP的几点建议 1.功能实现和界面展示

1.登录功能:进入日记本APP需要登录,默认账号为“admin”,默认密码为“123456”。后续有需要,可以建立数据库,添加注册功能,便可以有多个作者;
2.查看日记功能:登录完成,进入主页面,即显示作者书写的日记列表,点击某个日记标题可进行日记内容的查看、修改和保存;
3.添加日记功能:点击“添加日记”,进入新的日记书写界面。其中,日记书写时间默认为系统当前时间,日记作者默认为admin,对于日记书写时间不可以修改,日记作者可以修改。编辑完成日记内容,点击右上角“保存”按钮进行保存;
4.添加照片功能:在日记书写完成后,需从相册里选择一张照片(Android模拟机的photos),目前有点bug,不选择照片不能进行存储,后续会修改。
5.界面展示:
(1)登录界面:

(2)日记列表界面:

(3)日记书写界面:

2.登录界面

1.登录界面的实现其实很简单,如果只有一个作者,不涉及数据库的 *** 作,即可在Activity中进行账号和密码的输入判断。如果需要多个作者,则建立一个数据库,用来存储作者的账号和密码。对于此日记APP,只有一个作者,故在Login(登录的Activity)中,对账号和密码进行判断,登录成功跳转到日记列表界面(MainActivity),“登录”按钮的点击响应事件代码如下:

login.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
    	//读出用户名和密码并判断是否正确
    	String account=adminEdit.getText().toString();
    	String password=passwordEdit.getText().toString();
        //用户名和密码正确
        if(account.equals("admin")&&password.equals("123456")){
        	editor=pref.edit();
            //“是否保存密码”勾选
            if(savePassword.isChecked()){
            	editor.putBoolean("save_password",true);
                editor.putString("account",account);
                editor.putString("password",password);
            }
            else{
            	editor.clear();
            }
            //提交完成数据存储
            editor.apply();
            //显示登录成功并跳转到主界面活动
            Toast.makeText(Login.this,"登录成功",Toast.LENGTH_SHORT).show();
            Intent intent=new Intent(Login.this, MainActivity.class);
            startActivity(intent);
            //结束当前活动
            finish();
	}
    //用户名或密码错误
    else{
    	Toast.makeText(Login.this,"登录失败,请重新输入!",Toast.LENGTH_SHORT).show();
        }
   	}
});
3.日记存储

日记的存储分为两个部分来讲,一部分是照片存储,另一部分是其余内容存储。
1.其余内容存储。其余内容的存储是比较简单的,首先新建一个新的java类DatabaseHelper(只是我所用的名字,其余名字也可以),继承SQLiteOpenHelper,在其中对数据库和存储日记内容的表进行定义,部分代码如下:

public static final String DB_NAME="NotePad.db";
public static final int VERSION=1;
public static final String TABLE_NAME="Diary";
//建表语句
public static final String CREATE_DIARY="create table Diary(" +
            "id integer primary key autoincrement," +
            "title text," +
            "time text," +
            "author text," +
            "content text," +
            "picture BLOB)";

可以看到,日记的数据库定义包含:id(自增1),title(日记名称),time(系统当前时间),author(日记作者),content(日记内容),picture(照片)。数据库定义完成,接下来便是数据的收集和存储。首先,在日记书写界面,当用户输入相应部分的内容,或者在原有日记的基础上进行修改之后,需要进行数据的收集,(“保存”、“更新”、“删除”和“返回主页面”按钮的点击响应事件)代码如下:

//设置“保存”或者“删除”按钮点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
	switch(item.getItemId()){
    	case R.id.save:
        	if(tag==TAG_INSERT) {
            	ContentValues values = new ContentValues();
                values.put("title", title.getText().toString());
                values.put("author", author.getText().toString());
                values.put("content", content.getText().toString());
                final ByteArrayOutputStream os = new ByteArrayOutputStream();
                Bitmap bitmap = ((BitmapDrawable)picture.getDrawable()).getBitmap();
                bitmap.compress(Bitmap.CompressFormat.PNG,100,os);
                values.put("picture",os.toByteArray());
                db.insert(TABLE_NAME, null, values);
                values.clear();
                Toast.makeText(this, "Save", Toast.LENGTH_SHORT).show();
                finish();
                break;
            }else if(tag==TAG_UPDATE){
            	//修改title、content和picture
                String update_title=title.getText().toString();
                String update_author=author.getText().toString();
                String update_content=content.getText().toString();
                ContentValues values=new ContentValues();
                values.put("title",update_title);
                values.put("author",update_author);
                values.put("content",update_content);
                final ByteArrayOutputStream os = new ByteArrayOutputStream();
                Bitmap bitmap = ((BitmapDrawable)picture.getDrawable()).getBitmap();
                bitmap.compress(Bitmap.CompressFormat.PNG,100,os);
                values.put("picture",os.toByteArray());
                db.update(TABLE_NAME,values,"id=?",new String[]{String.valueOf(id)});
                finish();
                break;
            }
        case R.id.delete:
        	if(tag==TAG_UPDATE) {
            	db.delete(TABLE_NAME,"id=?",new String[]{String.valueOf(id)});
            }
            Toast.makeText(this,"Delete",Toast.LENGTH_SHORT).show();
            finish();
            break;
        case R.id.goBack:
        	finish();
            break;
        default:
    }
    return true;
}

对于数据展示,即日记内容的呈现,部分代码如下:

if(cursor.moveToFirst()){
	String select_title=cursor.getString(cursor.getColumnIndex("title"));
	String select_author=cursor.getString(cursor.getColumnIndex("author"));
	String select_content=cursor.getString(cursor.getColumnIndex("content"));
	title.setText(select_title);
	author.setText(select_author);
	content.setText(select_content);
	byte[] in = cursor.getBlob(cursor.getColumnIndex("picture"));
	Bitmap bitmap=BitmapFactory.decodeByteArray(in,0,in.length);
	picture.setImageBitmap(bitmap);
}

2.照片存储。由于数据库定义的数据类行里并没有picture这种存储类型,因而我们需要将照片转换成另一种形式进行存储。在此,我们转换为BLOB类型,在数据库中定义:

"picture BLOB"

而照片在Android中的类型为bitmap类型,对于Android中选择的照片(即bitmap类型)需要转换为BLOB类型,代码如下:

final ByteArrayOutputStream os = new ByteArrayOutputStream();
Bitmap bitmap = ((BitmapDrawable)picture.getDrawable()).getBitmap();
bitmap.compress(Bitmap.CompressFormat.PNG,100,os);
values.put("picture",os.toByteArray());

从数据库中读取照片,代码如下:

byte[] in = cursor.getBlob(cursor.getColumnIndex("picture"));
Bitmap bitmap=BitmapFactory.decodeByteArray(in,0,in.length);

显示在ImageView上,代码如下:

ImageView picture;//照片
picture=findViewById(R.id.detail_picture);
picture.setImageBitmap(bitmap);

至此,照片的存储和读取都完成啦。对于如何打开Android模拟机的photos,在郭霖《第一行代码》中有详细的步骤和说明,感兴趣可以去看一下。

4.系统时间获取和默认作者

日记本APP要求获取系统当前时间,显示在日记界面。对于时间获取,实现代码如下:

TextView time;  //时间
time= findViewById(R.id.detail_time);
time.setText(simpleDateFormat.format(date));

对于默认作者,代码如下:

EditText author; //作者
author= findViewById(R.id.detail_author);
author.setText("admin");

需要注意,时间是不可以手动修改的,而对于默认的作者,在编辑日记的时候可以进行修改,并且会被保存。

5.下载链接

日记本APP除了照片存储有些难度,整体并不是很难,希望可以认真学习一下。最后,附上日记本APP的github地址,代码仍不完善,欢迎指正。
Diary

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/992917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存