Android项目实践(二) 您所在的位置:网站首页 图片设计制作app源码怎么用 Android项目实践(二)

Android项目实践(二)

2024-03-17 06:26| 来源: 网络整理| 查看: 265

关于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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有