ایحاد سیستم register/login ؟
من میخوام سیستم ثبت نام کاربر رو به نرم افزارم اضافه کنم یک جدول درست کردم به اسم users با سه تافیلد
id |username | password
در سمت اندروید دوتا edittext برای دریافت user و password و یک دکمه گذاشتم در رویداد کلیک دکمه
به این صورت :
btnSingin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (edtUsername.getText().toString().length() > 0 && edtPassword.getText().toString().length() > 0) {
Username = edtUsername.getText().toString();
Password = edtPassword.getText().toString();
Cursor cursorUsername = G.database.rawQuery("select * FROM users WHERE username LIKE '%" + Username + "%'", null);
Cursor cursorPassword = G.database.rawQuery("select * FROM users WHERE username LIKE '%" + Password + "%'", null);
Log.i("", "Username: " + Username);
Log.i("", "Password: " + Password);
if (cursorPassword != null & cursorUsername != null) {
while (cursorUsername.moveToNext()) {
valueUsername = cursorUsername.getString(cursorUsername.getColumnIndex("username"));
}
while (cursorPassword.moveToNext()) {
valuePassword = cursorPassword.getString(cursorPassword.getColumnIndex("password"));
}
cursorUsername.close();
cursorPassword.close();
Log.i("", "valueUsername: " + valueUsername)
Log.i("", "valuePassword: " + valuePassword);
if (valueUsername.equals(Username) && valuePassword.equals(Password)) {
Intent intent = new Intent(G.currentActivity, ActivityMain.class);
G.currentActivity.startActivity(intent);
finish();
} else {
Toast.makeText(G.context, "نام کاربری یا رمز عبور اشتباه است", Toast.LENGTH_SHORT).show();
}
}
else {
Toast.makeText(G.context, "چنین کاربری در سیستم وجود ندارد", Toast.LENGTH_SHORT).show();
}
}
else {
Toast.makeText(G.context, "لطفا نام کاربری و رمز عبور را وارد کنید", Toast.LENGTH_SHORT).show();
}
}
});
وقتی نرم افزار رو اجرا میکنم با وارد کردن یوزرنیم و پسورد و زدن دکمه ورود برنامه کرش میکنه و در logcat خطای nullException میده به خاطر همین اون log ها رو گذاشتم تا ببینم مشکل از چیه !! متوجه شدم که قسمت cursorPassword مقدارش نال هست با وجود اینکه شرط هم گذاشتم اما از برنامه خارج میشه !! حالا میخواستم نظرتون رو بپرسم مشکل از کجای کد هست؟
ایده ی بهتر و امن تری برای پیاده سازی این سیستم سراغ ندارید؟!
نکاتی چند :
توی هر دو تا کوئری تو فیلد کاربر جستجو رو انجام دادی در حالی که مگه نباید برای پسورد دنبالش تو فیلد خودش باشی؟
فقط یک کوئری نیازه نه دو تا ، خب اگه تو کوئری اول اسم کاربر وجود داشته باشه رمز عبورش هم باید تو همون ردیف باشه دیگه! یعنی اول بررسی میکنی که اسم کاربر وجود داره یا نه اگه وجود داشت رمز عبور رو هم بررسی میکنه که درست هست یا نه.
اینجا :
if(cursorPassword !=null& cursorUsername !=null)
بجای شرط اولی اشاره گر رو بفرست به اول یعنی :
cursorUsername.moveToFirst()
و در خطوط بعدی حلقه while رو پاک کن و دو تا متغیرت رو مقدار دهی کن.
به 2 cursor نیاز نیست . تقریبا از یه همچین کدی باید استفاده کنی :
if (edtUsername.getText().toString().length() > 0 && edtPassword.getText().toString().length() > 0) {
Username = edtUsername.getText().toString();
Password = edtPassword.getText().toString();
Cursor cursorUsername = G.database.rawQuery("select * FROM users WHERE username LIKE '%" + Username + "%'", null);
Log.i("", "Username: " + Username);
Log.i("", "Password: " + Password);
if ( cursorUsername != null) {
while (cursorUsername.moveToNext()) {
valueUsername = cursorUsername.getString(cursorUsername.getColumnIndex("username"));
valuePassword = cursorUsername.getString(cursorUsername.getColumnIndex("password"));
Log.i("", "valueUsername: " + valueUsername)
Log.i("", "valuePassword: " + valuePassword);
if (valueUsername.equals(Username) && valuePassword.equals(Password)) {
Intent intent = new Intent(G.currentActivity, ActivityMain.class);
G.currentActivity.startActivity(intent);
finish();
} else {
Toast.makeText(G.context, "نام کاربری یا رمز عبور اشتباه است", Toast.LENGTH_SHORT).show();
}
}
cursorUsername.close();
}
else {
Toast.makeText(G.context, "چنین کاربری در سیستم وجود ندارد", Toast.LENGTH_SHORT).show();
}
}
else {
Toast.makeText(G.context, "لطفا نام کاربری و رمز عبور را وارد کنید", Toast.LENGTH_SHORT).show();
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .