android studio简单的密码日记本,实现增删改查功能
生活随笔
收集整理的這篇文章主要介紹了
android studio简单的密码日记本,实现增删改查功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡單的記事本
軟件名字:一本日記
軟件功能 :簡單的密碼日記本,實現(xiàn)增刪改查功能
軟件的使用知識點:
? 布局方面:線性布局,相對布局
? 控件方面:常見控件,List View, Navigation View(滑動菜單),FloatingActionButton (懸浮按鈕)
? 后臺方面:主要是Adapter和Sq Lite,Intent
項目的結構如下圖:
[外鏈圖片轉存失敗(img-OocaH9L5-1563628277567)(C:\Users\weng\Desktop\安卓期末1.png)]
分析軟件的組成:
展示核心的代碼
1,登錄
<EditTextandroid:id="@+id/edt_username"------請輸入昵稱android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:inputType="text"android:hint="請輸入昵稱"android:padding="5dp"/><EditTextandroid:id="@+id/edt_password"----------密 碼android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:inputType="textPassword"android:hint="請輸入密碼"android:padding="5dp"/><Buttonandroid:id="@+id/btn_login"----------登錄android:layout_below="@+id/line_password"android:layout_width="80dp"android:layout_marginTop="40dp"android:layout_marginLeft="60dp"android:text="登 錄"android:background="@android:color/white"android:textSize="24sp"android:layout_height="60dp" /><Buttonandroid:id="@+id/btn_go_register"----------注冊android:layout_below="@+id/line_password"android:layout_toRightOf="@+id/btn_login"android:layout_width="80dp"android:layout_marginTop="40dp"android:layout_marginLeft="80dp"android:text="注 冊"android:background="@android:color/white"android:textSize="24sp"android:layout_height="60dp" />登錄的業(yè)務邏輯:```java public class LoginActivity extends AppCompatActivity {public static int userID;public static String username;String name, password;//保存數(shù)據(jù)private EditText edt_username;//用戶名字private EditText edt_password;//用戶密碼private Button btn_login;private Button btn_register;//private SQLiteDatabase sqlDate;private MyDB myDB;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();//隱藏標題欄setContentView(R.layout.activity_main);initUI();myDB = new MyDB(this);//創(chuàng)建對象//注冊btn_register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(LoginActivity.this, RegistActivity.class);startActivityForResult(intent,1);}});//登入btn_login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {name = edt_username.getText().toString();password = edt_password.getText().toString();if (enter(name, password)) {Toast.makeText(LoginActivity.this, "登錄成功" + name, Toast.LENGTH_SHORT).show();new Thread(){public void run() {try {Thread.sleep(1000);Intent intent1 = new Intent(LoginActivity.this, IndexActivity.class);startActivity(intent1);} catch (Exception e) {e.printStackTrace();}}}.start();} else if (TextUtils.isEmpty(name) || TextUtils.isEmpty(password) || TextUtils.isEmpty(name) && TextUtils.isEmpty(password)) {Toast.makeText(LoginActivity.this, "請輸入用戶名或密碼", Toast.LENGTH_SHORT).show();} else {Toast.makeText(LoginActivity.this, "登入失敗", Toast.LENGTH_SHORT).show();}}});}/*** 初始化:initUI()*/private void initUI() {edt_username = (EditText) findViewById(R.id.edt_username);edt_password = (EditText) findViewById(R.id.edt_password);btn_login = (Button) findViewById(R.id.btn_login);btn_register = (Button) findViewById(R.id.btn_go_register);}/*** 判斷是否username,password 和數(shù)據(jù)庫的相同 enter()*/public boolean enter(String name, String password) {SQLiteDatabase db = myDB.getWritableDatabase();String sql = "select user_id from tb_user where username=? and password=?";Cursor cursor = db.rawQuery(sql, new String[]{name, password});if (cursor.getCount() != 0) {//返回Cursor 中的行數(shù)if (cursor.moveToNext()) {userID = cursor.getInt(cursor.getColumnIndex("user_id"));username = name;}cursor.close();return true;}return false;}/*** 數(shù)據(jù)回顯* @param requestCode* @param resultCode* @param data*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode==1 && resultCode==1){String name=data.getStringExtra("name");String password=data.getStringExtra("password");edt_username.setText(name);edt_password.setText(password);}} }2注冊
<EditTextandroid:id="@+id/edt_setusername"-------名字android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:inputType="text"android:hint="請輸入昵稱:"android:padding="5dp"/><EditTextandroid:id="@+id/edt_setpassword"---------密碼android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:inputType="textPassword"android:hint="請輸入密碼"android:padding="5dp"/><EditTextandroid:id="@+id/edt_confirm_password"----確認密碼android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:inputType="textPassword"android:hint="請輸入密碼"android:padding="5dp"/><Buttonandroid:id="@+id/btn_register"---------注冊android:layout_below="@+id/line_confirm_pwd"android:layout_width="match_parent"android:layout_marginTop="30dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@android:color/white"android:text="確定注冊"android:textSize="16sp"android:layout_height="45dp" />注冊的業(yè)務邏輯:
public class RegistActivity extends AppCompatActivity {private EditText edt_setname;private EditText edt_setpassword;private EditText edt_confirm_password;private Button btn_register;String name,password,id;private MyDB myDB;ContentValues contentValues=new ContentValues();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();//隱藏標題欄*/setContentView(R.layout.activity_regist);initUI();myDB=new MyDB(this);btn_register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {SQLiteDatabase db=myDB.getWritableDatabase();name = edt_setname.getText().toString();password = edt_setpassword.getText().toString();if (edt_setname.getText().toString().contains(" ") || edt_setpassword.getText().toString().contains(" ")) {Toast.makeText(RegistActivity.this, "輸入的用戶名或密碼不能包含空格", Toast.LENGTH_SHORT).show();return;}else if(edt_setpassword.getText().toString().length()==0||edt_setname.getText().toString().length()==0){Toast.makeText(RegistActivity.this, "請輸入用戶名或密碼", Toast.LENGTH_SHORT).show();return;}else if(!edt_confirm_password.getText().toString().equals(edt_setpassword.getText().toString())){Toast.makeText(RegistActivity.this, "兩次密碼不一致,請確認再注冊", Toast.LENGTH_SHORT).show();return;}if(login(name)){Toast.makeText(RegistActivity.this, "該用戶名已注冊", Toast.LENGTH_SHORT).show();return;}contentValues.put("username", name);contentValues.put("password", password);db.insert("tb_user", null, contentValues);String sql="select user_id from tb_user where username=? and password=?";Cursor cursor = db.rawQuery(sql, new String[] {name, password});if(cursor.moveToNext()){//idid=Integer.toString(cursor.getInt(0));//防止數(shù)據(jù)庫的值null和0 分不清}cursor.close();db.close();Toast.makeText(RegistActivity.this, "注冊成功", Toast.LENGTH_SHORT).show();new Thread(){@Overridepublic void run() {super.run();try {Thread.sleep(1000);Intent intent = new Intent(RegistActivity.this,LoginActivity.class);intent.putExtra("name",edt_setname.getText().toString());intent.putExtra("password",edt_setpassword.getText().toString());setResult(1, intent);//返回頁面1finish();// startActivity(intent);} catch (InterruptedException e) {e.printStackTrace();}}}.start();}});}/*** 初始化View :initUI()*/public void initUI(){edt_setname=(EditText)findViewById(R.id.edt_setusername);edt_setpassword=(EditText)findViewById(R.id.edt_setpassword);edt_confirm_password=(EditText)findViewById(R.id.edt_confirm_password);btn_register=(Button)findViewById(R.id.btn_register);}/*** 查詢數(shù)據(jù)庫是否有重復的* 進行數(shù)據(jù)的查詢 login()*/public boolean login(String name){SQLiteDatabase db=myDB.getWritableDatabase();String sql="select * from tb_user where username=?";Cursor cursor=db.rawQuery(sql,new String[]{name});if (cursor.getCount()!=0){cursor.close();return true;}return false;} }3主頁面
<ListViewandroid:id="@+id/list"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView><android.support.design.widget.FloatingActionButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_marginBottom="30dp"android:layout_marginRight="20dp"app:fabSize="mini"app:srcCompat="@android:drawable/ic_input_add"android:id="@+id/floactAdd"app:backgroundTint="@color/colorPrimaryDark" /> </RelativeLayout> <android.support.design.widget.NavigationViewandroid:layout_gravity="left"app:headerLayout="@layout/head"app:menu="@menu/meun_main"android:id="@+id/navigat"android:layout_width="230dp"android:layout_height="match_parent"/>主頁面的業(yè)務邏輯:
public class IndexActivity extends AppCompatActivity {List<Note> mList;private FloatingActionButton fdb;private NavigationView navigationView;private ListView listView;private MyAdapter myAdapter;private MyDB myDB;private Cursor cursor;private SQLiteDatabase dbreader;;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();//隱藏標題欄setContentView(R.layout.activity_test);listView = (ListView) findViewById(R.id.list);navigationView = (NavigationView) findViewById(R.id.navigat);View view1 = navigationView.getHeaderView(0);//通過nav來查詢head文件TextView wc = view1.findViewById(R.id.welcome);myDB = new MyDB(this);dbreader = myDB.getReadableDatabase();wc.setText("歡迎你:" + LoginActivity.username);Toast.makeText(IndexActivity.this, "登錄成功,歡迎回來!", Toast.LENGTH_SHORT).show();listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {Intent intent = new Intent(IndexActivity.this, showActivity.class);intent.putExtra("ID", mList.get(position).getId());intent.putExtra("content", mList.get(position).getContent());intent.putExtra("time", mList.get(position).getTime());startActivity(intent);}});fdb = (FloatingActionButton) findViewById(R.id.floactAdd);fdb.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(IndexActivity.this, AddContentActivity.class);startActivity(intent);}});navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()){case R.id.prsetposs:Intent intent1=new Intent(IndexActivity.this,setpasswordActivity.class);intent1.putExtra("username",LoginActivity.username);startActivity(intent1);break;case R.id.showtime:Toast.makeText(IndexActivity.this,AddContentActivity.getTime(),Toast.LENGTH_LONG).show();break;case R.id.prsize:Toast.makeText(IndexActivity.this,IndexActivity.this.allDBNum() + "個用戶使用了軟件",Toast.LENGTH_LONG).show();break;case R.id.success:Intent intent=new Intent(IndexActivity.this,LoginActivity.class);Toast.makeText(IndexActivity.this,"退出成功",Toast.LENGTH_LONG).show();startActivity(intent);}return true;}});}public void selectDb() {mList = new ArrayList<>();cursor = dbreader.rawQuery("SELECT * FROM tb_note WHERE userID = ?", new String[]{LoginActivity.userID + ""});while (cursor.moveToNext()) {Note note = new Note();int id = cursor.getInt(cursor.getColumnIndex("ID"));String time = cursor.getString(cursor.getColumnIndex("time"));String content = cursor.getString(cursor.getColumnIndex("content"));note.setTime(time);note.setContent(content);note.setId(id);mList.add(note);}cursor.close();myAdapter = new MyAdapter(this, mList);listView.setAdapter(myAdapter);}@Overrideprotected void onResume() {super.onResume();selectDb();}/***查詢用戶的個數(shù) allDBNum()*/public int allDBNum( ){String sql = "select count(*) count from tb_user";Cursor cursor = dbreader.rawQuery(sql, null);cursor.moveToFirst();int count= cursor.getInt(0);if (cursor.getCount()!=0){cursor.close();}return count;} }4 List View 布局:
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:layout_gravity="center_vertical"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/list_content"android:textColor="#000"android:textSize="20sp"android:text="tv"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/list_time"android:textColor="#000"android:textSize="20sp"android:text="time"/> </LinearLayout>5List View適配器:
public class MyAdapter extends BaseAdapter {private Context mContext;private List<Note> mList;private LinearLayout mlayout;public MyAdapter(Context mContext, List<Note> mList){this.mContext=mContext;this.mList=mList;}@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(mContext);mlayout=(LinearLayout) inflater.inflate(R.layout.listre,null);TextView content=(TextView)mlayout.findViewById(R.id.list_content);TextView time=(TextView)mlayout.findViewById(R.id.list_time);content.setText(mList.get(position).getContent());time.setText(mList.get(position).getTime());return mlayout;} }6數(shù)據(jù)庫文件:
ublic class MyDB extends SQLiteOpenHelper{//用戶表public static final String CREATE_USER="create table tb_user(" +"user_id integer primary key autoincrement," +"username varchar(50)," +"password varchar(50))";//public static final String CREATE_NOTE="create table tb_note("+"ID integer primary key AUTOINCREMENT,"+"content TEXT NOT NULL,"+"userID integer,"+"time TEXT NOT NULL)";//上下文private Context mcontext;public static final String CREATE_NOTES="";public MyDB(Context context) {super(context, "MyDB.db", null, 2);mcontext=context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_USER);db.execSQL(CREATE_NOTE);Toast.makeText(mcontext,"創(chuàng)建成功!",Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {} }7Note的實體類:
public class Note {private Integer id;private Integer userID;private String content;private String time;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getUserID() {return userID;}public void setUserID(Integer userID) {this.userID = userID;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getTime() {return time;}public void setTime(String time) {this.time = time;} }8添加內容的頁面:
<EditTextandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="top"android:hint="開始記錄吧"/><Buttonandroid:id="@+id/save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="保存"android:onClick="save"/><Buttonandroid:id="@+id/cancle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="取消"android:onClick="cancle"/>添加內容的業(yè)務邏輯:
private EditText met; private MyDB myDB; private SQLiteDatabase mysqldb; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();//隱藏標題欄setContentView(R.layout.activity_add_content);met=(EditText)findViewById(R.id.text);myDB=new MyDB(this);mysqldb=myDB.getWritableDatabase(); } public void save(View v) {DdAdd();finish(); } public void cancle(View v) {met.setText("");finish(); } public void DdAdd(){ContentValues cv = new ContentValues();cv.put("content",met.getText().toString());cv.put("time",getTime());cv.put("userID", LoginActivity.userID);mysqldb.insert("tb_note",null,cv);//插入數(shù)據(jù) } public static String getTime(){SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date date=new Date();String str=sdf.format(date);return str; }9顯示內容的頁面:
<TextViewandroid:id="@+id/showtime"android:layout_width="match_parent"android:layout_height="30dp"android:layout_marginLeft="10dp"android:textSize="20sp"/> <EditTextandroid:id="@+id/showtext"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="20sp"android:gravity="top"android:layout_weight="1"android:layout_marginTop="10dp"android:layout_marginLeft="10dp"android:textColor="#000"android:hint="記事本"/><Buttonandroid:id="@+id/delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="刪除"android:onClick="delete"/><Buttonandroid:id="@+id/update"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="修改"android:onClick="update" /><Buttonandroid:id="@+id/back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="返回"android:onClick="goBack"/> </LinearLayout>顯示頁面的業(yè)務邏輯:
public class showActivity extends AppCompatActivity {private EditText mtext;private TextView time;private MyDB myDB;private SQLiteDatabase msql;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();//隱藏標題欄setContentView(R.layout.activity_show);mtext=(EditText) findViewById(R.id.showtext);time=(TextView)findViewById(R.id.showtime);myDB=new MyDB(this);msql=myDB.getWritableDatabase();mtext.setInputType(InputType.TYPE_CLASS_TEXT);//開啟可以編寫mtext.setText(getIntent().getStringExtra("content"));time.setText(getIntent().getStringExtra("time"));}/*** 刪除 delete* @param v*/public void delete(View v) {int id = getIntent().getIntExtra("ID",0);msql.delete("tb_note","ID = " + id,null);finish();/*** 修改 update*/}public void update(View v){int id = getIntent().getIntExtra("ID",0);String content=mtext.getText().toString();msql.execSQL("UPDATE tb_note SET content=? WHERE ID = ?",new String[]{content,id+""});finish();}/*** 關閉* @param v*/public void goBack(View v) {finish();}}10修改密碼的頁面:
<TextViewandroid:layout_marginTop="-120dp"android:text="修改密碼"android:textSize="34dp"android:layout_marginBottom="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content" /> <EditTextandroid:id="@+id/setpass"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="輸入新密碼"/><Buttonandroid:id="@+id/yes"android:text="確定"android:layout_width="wrap_content"android:layout_height="match_parent"android:onClick="yes"/><Buttonandroid:id="@+id/no"android:text="取消"android:layout_width="wrap_content"android:layout_height="match_parent"android:onClick="no"/> </LinearLayout>修改密碼的業(yè)務邏輯:
public class setpasswordActivity extends AppCompatActivity {private EditText setpass;private MyDB myDB;private SQLiteDatabase msql;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隱藏狀態(tài)欄getSupportActionBar().hide();setContentView(R.layout.activity_setpassword);myDB=new MyDB(this);msql=myDB.getWritableDatabase();setpass=(EditText)findViewById(R.id.setpass);}public void yes(View v){String username = getIntent().getStringExtra("username");String pass=setpass.getText().toString();msql.execSQL("UPDATE tb_user SET password=? WHERE username=?",new String[]{pass,username});Toast.makeText(setpasswordActivity.this, "密碼修改完了,請記住現(xiàn)在的密碼", Toast.LENGTH_SHORT).show();Intent intent2=new Intent(setpasswordActivity.this,LoginActivity.class);startActivity(intent2);finish();}public void no(View v){Intent intent=new Intent(setpasswordActivity.this,IndexActivity.class);startActivity(intent);finish();} }軟件的展示圖片:
登錄:
注冊:
主頁面
主頁面2
添加
修改
總結
以上是生活随笔為你收集整理的android studio简单的密码日记本,实现增删改查功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2003 局部友元访问私有不可访问_
- 下一篇: 深度学习之非极大值抑制(Non-maxi