Android使用fragments和SQLite登录后显示用户名



我创建了一个存储用户详细信息的SQLite数据库,我想知道如何在用户登录后显示用户名,因为登录后我可以让它显示新片段,但在该片段上,我希望它显示已登录的用户的用户名。

数据库辅助类

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String LOGIN_TABLE = "login_table";
public static final String LOGIN_ID = "LOGIN_ID";
public static final String LOGIN_NAME = "LOGIN_NAME";
public static final String LOGIN_EMAIL = "LOGIN_EMAIL";
public static final String LOGIN_PASSWORD = "LOGIN_PASSWORD";
public static final String LOGIN_CONFIRM = "LOGIN_CONFIRM";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
SQLiteDatabase db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + LOGIN_TABLE + " (LOGIN_ID INTEGER PRIMARY KEY AUTOINCREMENT,LOGIN_NAME TEXT,LOGIN_EMAIL TEXT,LOGIN_PASSWORD TEXT,LOGIN_CONFIRM TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + LOGIN_TABLE);
onCreate(db);
}

public boolean insertLoginData(String login_name, String login_email, String login_password) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues loginData = new ContentValues();
loginData.put(LOGIN_NAME, login_name);
loginData.put(LOGIN_EMAIL, login_email);
loginData.put(LOGIN_PASSWORD, login_password);
long result = db.insert(LOGIN_TABLE, null, loginData);
if (result == -1)
return false;
else
return true;
}

//Registering User
public Boolean emailcheck(String login_email) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + LOGIN_TABLE + " where login_email=?", new String[]{login_email});
if(cursor.getCount()>0)
return false;
else
return true;
}
//Logging in user
public Boolean logincheck(String login_email, String login_password) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + LOGIN_TABLE + " where login_email=? and login_password=?", new String[]{login_email, login_password});
if(cursor.getCount()>0)
return true;
else
return false;
}
}

登录class

public class AdminFragment extends Fragment {
private AdminViewModel adminViewModel;
DatabaseHelper DB_CRIME;
EditText email,password;
Button login_btn, register_btn;

public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
adminViewModel =
new ViewModelProvider(this).get(AdminViewModel.class);
View root = inflater.inflate(R.layout.fragment_admin, container, false);

final TextView textView = root.findViewById(R.id.text_admin);
adminViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
DB_CRIME = new DatabaseHelper(getActivity());
email = (EditText) root.findViewById(R.id.editText_login_email);
password = (EditText) root.findViewById(R.id.editText_login_password);
login_btn = (Button) root.findViewById(R.id.button_login);
register_btn = (Button) root.findViewById(R.id.button_register);
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String login_email = email.getText().toString();
String login_password = password.getText().toString();
Boolean logincheck = DB_CRIME.logincheck(login_email,login_password);
if(logincheck==true) {
Toast.makeText(getActivity().getApplicationContext(), "You have successfully logged in", Toast.LENGTH_SHORT).show();
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.containerAdmin, new LoggedInFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
else
Toast.makeText(getActivity().getApplicationContext(), "Incorrect Details Entered, Please Try Again", Toast.LENGTH_SHORT).show();
}
});
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.containerAdmin, new RegisterFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});

return root;
}
}

你可以像这样给DatabaseHelper添加一个新方法

public String getUsernameFromEmail(String email) {
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + LOGIN_TABLE + " WHERE " + LOGIN_EMAIL + " = " + email;
Cursor cursor = db.rawQuery(query, null);
String username = "";
if (cursor.getCount() == 1) {
cursor.moveToFirst();
username = cursor.getString(cursor.getColumnIndex(LOGIN_NAME));
}
return username;
}

使用此方法,您可以从表中获取属于给定电子邮件的用户名,并且由于电子邮件总是唯一的,因此不需要检查该电子邮件的多个条目。你可以在你想要的片段中调用这个方法,就像你为logincheck所做的那样,给你用户名作为字符串,之后你可以很容易地在textview中显示它。

最新更新