在此应用程序中,登录屏幕有 3 个按钮:忘记密码、登录并注册,明确的注册意图正常工作,但如果忘记密码,则会强制关闭应用程序
登录页面.java
package com.example.myapplication;
#*REMOVED IMPORTS FOR SIMPLICITY*#
import com.google.android.material.textfield.TextInputLayout;
public class LoginPage extends AppCompatActivity {
// Varaibles
Button signup,signin,forgetpass;
ImageView logo;
TextInputLayout username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_login_page);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
signup = findViewById(R.id.signUpBtn);
logo = findViewById(R.id.logo);
signin = findViewById(R.id.signInBtn);
username = findViewById(R.id.username);
password = findViewById(R.id.pass);
forgetpass = findViewById(R.id.forgetBtn);
DBHelper dbHelper = new DBHelper(this);
**forgetpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginPage.this,ForgetPasswordPage.class);
startActivity(intent);
}
});**
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginPage.this, SignUpPage.class);
Pair[] pair = new Pair[3];
pair[0] = new Pair<View,String>(logo,"logo_img");
pair[1] = new Pair<View,String>(signin,"sign_up_in");
pair[2] = new Pair<View,String>(signup,"back_sign_up_in");
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(LoginPage.this,pair);
startActivity(intent,options.toBundle());
}
});
**signin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uname = username.getEditText().getText().toString();
String pass = password.getEditText().getText().toString();
if (dbHelper.checkUsername(uname))
{
if (dbHelper.checkusernamePassword(uname,pass))
{
Intent intent = new Intent(LoginPage.this, HomePage.class);
startActivity(intent);
}else {
password.setError("Incorrect password");
}
}else {
username.setError("Username not found");
}
}
});
**
}
}
忘记密码页面.java
package com.example.myapplication;
#*REMOVED IMPORTS FOR SIMPLICITY*#
import com.google.android.material.textfield.TextInputLayout;
public class ForgetPasswordPage extends AppCompatActivity {
ImageView back;
Button forgetPass;
TextInputLayout uname,pass,repass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_forget_password_page);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
uname = findViewById(R.id.Fusername);
pass = findViewById(R.id.NewPassword);
repass = findViewById(R.id.NewRePassword);
forgetPass = findViewById(R.id.ForgetBtn);
DBHelper dbHelper = new DBHelper(this);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ForgetPasswordPage.this, LoginPage.class);
startActivity(intent);
}
});
forgetPass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = uname.getEditText().getText().toString();
String password = pass.getEditText().getText().toString();
String rePassword = repass.getEditText().getText().toString();
if (!password.equals(rePassword))
{
repass.setError("Password dose not match");
pass.setError("Password dose not match");
} else if (!dbHelper.checkUsername(username)) {
uname.setError("User dose not exist");
} else if (password.equals(rePassword) && dbHelper.checkUsername(username)) {
dbHelper.changePassword(username,password);
}
}
});
}
}
在登录时,即使我的 uname 和 pass 正确,应用程序也会强制关闭,我认为 DBHelper.java 中可能存在一些问题
DBHelper.java
package com.example.myapplication;
#*REMOVED IMPORTS FOR SIMPLICITY*#
import androidx.annotation.Nullable;
public class DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "login.db";
public DBHelper(Context context) {
super(context, DBNAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create TABLE users(unsername TEXT primary key,password TEXT,fullName TEXT,email TEXT,phone TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop Table if exists users");
}
public boolean insertData(String username, String password, String fullName, String email,String phone) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("unsername",username);
contentValues.put("password",password);
contentValues.put("fullName",fullName);
contentValues.put("email",email);
contentValues.put("phone",phone);
long results = db.insert("users",null,contentValues);
if (results == -1)
return false;
else
return true;
}
public boolean checkUsername (String username) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM users WHERE usnername = ?",new String[] {username});
if (cursor.getCount() > 0)
return true;
else
return false;
}
public boolean checkusernamePassword (String username, String password) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM users WHERE usnername = ? and password = ?",new String[] {username,password});
if (cursor.getCount() > 0)
return true;
else
return false;
}
public boolean changePassword (String username, String password) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("UPDATE users SET passwod = ? WHERE username = ?",new String[] {password,username});
if (cursor.getCount() > 0)
return true;
else
return false;
}
}
我不知道意图代码是否相同,但它仍然无法正常工作,因为登录时我的查询执行一定有问题
当您想从某个 Activity 返回到其调用者/调用者时,您不应该启动要返回的 Activity,而应该
finish
该 Activity。
所以代替:-
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ForgetPasswordPage.this, LoginPage.class);
startActivity(intent);
}
});
你会使用:-
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ForgetPasswordPage.this, LoginPage.class);
finish();
}
});