在学习了安卓内置的数据库之后极客班的老师布置了如下作业。
练习使用SQLite:
a) 做一个登录界面,登录字段有用户名、密码以及是否登录中的状态
b) 模拟登录成功后,有退出按钮,将登录的用户名及登录状态写入数据库
c) 下一次登录时,显示上一次登录的用户名
d) 保存所有用户登录的历史,重复的不保存
e) 当点击退出时,将当前用户登录状态清除
主要想法就是在在输入用户名和密码时显示未登录状态,在点击登录按钮后将用户名和密码保存进SQLite数据库,显示已登录状态,在数据保存之前先根据用户名进行查找,如果用户名已经存在就不进行保存。在点击登出按钮之后显示未登录状态。
话不多说,开始上代码。
首先是创建数据库
public class LoginSQL extends SQLiteOpenHelper {
public static final String NAME = "name" ;
public static final String CREATE_LOGIN = "create table login(" +"id integer primary key autoincrement,"
+"name text unique key ," +"password text," +"login integer)" ;
public LoginSQL (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super (context, name, factory, version);
}
@Override
public void onCreate (SQLiteDatabase db) {
db.execSQL(CREATE_LOGIN);
}
@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
然后是登录页面的代码
public class MainActivity extends AppCompatActivity {
private Button loginButton;
private TextView showLogin;
private LoginSQL dbHelper;
private EditText userName;
private EditText passWord;
private String username;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new LoginSQL(this ,"Login.db" ,null ,1 );
userName = (EditText) findViewById(R.id.editText);
passWord = (EditText) findViewById(R.id.editText2);
showLogin = (TextView) findViewById(R.id.show_the_login);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor =db.query("login" ,null ,null ,null ,null ,null ,null );
if (cursor.moveToLast()){
username = cursor.getString(cursor.getColumnIndexOrThrow(dbHelper.NAME));
}
userName.setText(username);
showLogin.setText("未登录" );
loginButton = (Button) findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
showLogin.setText("登录中" );
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name" ,String.valueOf(userName.getText()));
values.put("password" , String.valueOf(passWord.getText()));
values.put("login" , 1 );
long trueorfalse = db.insert("login" , null , values);
if (trueorfalse != -1 ){
Toast.makeText(MainActivity.this ,"插入成功" ,Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent(MainActivity.this ,Main2Activity.class);
startActivity(intent);
}
});
}
}
接着是登录后的界面的代码
public class Main2Activity extends AppCompatActivity {
private LoginSQL dbHelper;
private Button logOut;
private TextView hello;
private String username;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
dbHelper = new LoginSQL(this ,"Login.db" ,null ,1 );
hello = (TextView) findViewById(R.id.text_view);
logOut = (Button) findViewById(R.id.logout_button);
logOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor =db.query("login" , null , null , null , null , null , null );
if (cursor.moveToFirst()){
username = cursor.getString(cursor.getColumnIndexOrThrow(dbHelper.NAME));
}
ContentValues values = new ContentValues();
values.put("login" , 0 );
db.update("login" , values, "name = ?" , new String[]{username});
Intent intent = new Intent(Main2Activity.this ,MainActivity.class);
startActivity(intent);
}
});
}
}