Явное намерение не работает с кнопкой «Забыть пароль», также невозможно прочитать данные из БД во время входа в систему.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Явное намерение не работает с кнопкой «Забыть пароль», также невозможно прочитать данные из БД во время входа в систему.

Сообщение Anonymous »

В этом приложении на экране входа есть 3 кнопки: забыть пароль, войти и зарегистрироваться. Явное намерение зарегистрироваться работает правильно, но если забыть пароль, приложение принудительно закрывается.
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(logo,"logo_img");
pair[1] = new Pair(signin,"sign_up_in");
pair[2] = new Pair(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);
}
}
});

}
}
также при входе в систему, даже если мое имя и пароль верны, приложение принудительно закрывается, я думаю, что может быть какая-то проблема в 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;
}
}

Вот важный фрагмент кода, в котором, по моему мнению, есть проблема.

Код: Выделить всё

forgetpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginPage.this,ForgetPasswordPage.class);
startActivity(intent);
}
});
В приведенном выше фрагменте намерение не работает должным образом: при первом нажатии приложение автоматически сворачивается, а при повторном нажатии оно полностью завершает работу.

Код: Выделить всё

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");
}
}
});
Для этой кнопки входа я думаю, что функция DBHelper может содержать проблему. Ниже приведен фрагмент кода DBHelper

Код: Выделить всё

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;
}
Я не знаю, что код намерения тот же, но он все равно не работает, так как при входе в систему должна быть проблема при выполнении моего запроса

Подробнее здесь: https://stackoverflow.com/questions/782 ... -read-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Когда использовать явное глобальное пространство имен или явное пространство имен std
    Anonymous » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Кнопка для входа будет кнопкой для входа в систему
    Anonymous » » в форуме Html
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Кнопка для входа будет кнопкой для входа в систему
    Anonymous » » в форуме Html
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Кнопка для входа будет кнопкой для входа в систему
    Anonymous » » в форуме CSS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как сменить электронную почту на мобильную в Laravel 10, чтобы забыть пароль?
    Гость » » в форуме Php
    0 Ответы
    23 Просмотры
    Последнее сообщение Гость

Вернуться в «Android»