显式意图不适用于忘记密码按钮,也无法在登录期间从数据库读取数据

问题描述 投票:0回答:1

在此应用程序中,登录屏幕有 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;
    }
}

我不知道意图代码是否相同,但它仍然无法正常工作,因为登录时我的查询执行一定有问题

android android-intent android-sqlite
1个回答
0
投票

当您想从某个 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();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.