In this app the login screen has 3 buttons forget password, sign in and sign up the explicit intent for sign up is working properly but for forget password it force closes the app
LoginPage.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");
}
}
});
}
}
ForgetPasswordpage.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);
}
}
});
}
}
also in when signing in even if my uname and pass are correct the app force closes i think there may some problem in 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;
}
}
Here are important code snippet in which i think there is problem
forgetpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginPage.this,ForgetPasswordPage.class);
startActivity(intent);
}
});
in above snippet the intent is not working properly when clicked first time the app automatically minimized and when clicked again it crashes completely
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");
}
}
});
for this sign in button the i think The DBHelper function might contain problem below are DBHelper code snippet
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;
}
i don't know the intent code are same but still it is not working as for sign in there must be problem in my query execution
When you want to return from an activity to it's caller/invoker then you should not start the activity to be returned to, you should
finishthe activity.So instead of:-
You would use:-