如何从 SQLite 数据库获取用户 ID (Rowid) 并将其显示在 TextView (Android)

How to get User Id (Rowid) from SQLite Database and show it in TextView (Android)

我制作了一个 SQLite 登录和注册应用程序。成功登录后,我希望用户看到一个 TextView,其中 he/she 看到 "Welcome user_name" 和“您的 Id-Number:user_id。然后通过 user_id 我想看看RowId.

这是 DatabaseHelper 的一些代码:

public class DatabaseHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "UserManager.db";

private static final String TABLE_USER = "user";

private static final String COLUMN_USER_ID = "user_id";
private static final String COLUMN_USER_NAME = "user_name";
private static final String COLUMN_USER_EMAIL = "user_email";
private static final String COLUMN_USER_PASSWORD = "user_password";

private String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "("
        + COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_USER_NAME + " TEXT,"
        + COLUMN_USER_EMAIL + " TEXT," + COLUMN_USER_PASSWORD + " TEXT" + ")";

public long getUserId (String email){
    long userId = 0;
    SQLiteDatabase db = this.getWritableDatabase();
    String[] columns = {
            COLUMN_USER_ID
    };
    String selection = COLUMN_USER_EMAIL + " = ?";
    String[] selectionArgs = { email };

    Cursor cursor = db.query(TABLE_USER,
            columns,
            selection,
            selectionArgs,
            null,
            null,
            null);
    int cursorCount = cursor.getCount();
    cursor.moveToFirst();
    userId = cursor.getLong(0);
    cursor.close();
    db.close();

    if (cursorCount > 0){
        return userId;
    }
    return userId;
}

LoginActivity 中,我希望在单击“登录”后获取用户名和用户 ID 的值。这是一些代码:

if (databaseHelper.checkUser(textInputEditTextEmail.getText().toString().trim()
            , textInputEditTextPassword.getText().toString().trim())){
        Intent accountsIntent = new Intent(activity, UsersActivity.class);
        accountsIntent.putExtra("NAME", databaseHelper.getUserName(textInputEditTextEmail.getText().toString().trim()));
        Intent idIntent = new Intent(activity, UsersActivity.class);
        String ID = String.valueOf(databaseHelper.getUserId(textInputEditTextEmail.getText().toString().trim()));
        idIntent.putExtra("ID", ID);
        emptyInputEditText();
        startActivity(accountsIntent);
    } else {
        Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
    }

最后我希望它显示在 UserActivity:

textViewName = (TextView) findViewById(R.id.text1);
    String nameFromIntent = getIntent().getStringExtra("NAME");
    textViewName.setText("Welcome " + nameFromIntent);

    textViewId = (TextView) findViewById(R.id.text2);
    String idFromIntent = getIntent().getStringExtra("ID");
    textViewId.setText("Your Id-Number: " + idFromIntent);

但是,使用用户名一切正常,但用户 ID 却搞砸了。它显示了我 "Your Id-Number: null"

我在网上找不到任何解决方案,所以我 post 在这里。 如何获取必须为 INTEGER PRIMARY KEY AUTOINCREMENT 的用户 ID 并将其显示为字符串。但为了让它变得更加复杂,我还需要用户 ID 作为 int/long 以实现更多功能(转换为二进制代码,...)。

试试这个:

替换

cursor.getLong(0);

cursor.getLong(cursor.getColumnIndex(COLUMN_USER_ID));

更新: 也尝试删除这个:

Intent idIntent = new Intent(activity, UsersActivity.class);

并替换

idIntent.putExtra("ID", ID);

accountIntent.putExtra("ID", ID);

您的 DatabaseHelper 存在一些错误和不相关的代码结构。

像下面的代码一样替换您的 DatabaseHelper。

   public class DatabaseHelper  {

    private static final String TAG = "DatabaseHelper";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "UserManager";

    private static final String TABLE_USER = "user";

    private static final String COLUMN_USER_ID = "user_id";
    private static final String COLUMN_USER_NAME = "user_name";
    private static final String COLUMN_USER_EMAIL = "user_email";
    private static final String COLUMN_USER_PASSWORD = "user_password";

    private static final String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "("
            + COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
            + COLUMN_USER_NAME + " TEXT,"
            + COLUMN_USER_EMAIL + " TEXT,"
            + COLUMN_USER_PASSWORD + " TEXT" + ")";


    private final Context context;
    private AppDatabaseHelper appDB;
    private SQLiteDatabase db;

    public DatabaseHelper(Context ctx) {
        this.context = ctx;
        appDB = new AppDatabaseHelper(context);
    }

    // Open the database connection.
    public DatabaseHelper open() {
        db = appDB.getWritableDatabase();
        return this;
    }

    public boolean checkIfUserExit(String tableName,String emailId) {
        String where = COLUMN_USER_EMAIL+" LIKE '%"+emailId+"%'";
        Cursor c = db.query(true, tableName, null,
                where, null, null, null, null, null);
        if(c.getCount()>0)
            return true;
        else
            return false;
    }

    public int GetUserID(String tableName,String emailId) {
        String where = COLUMN_USER_EMAIL+" LIKE '%"+emailId+"%'";
        Cursor c = db.query(true, tableName, null,
                where, null, null, null, null, null);
        if(c.getCount()>0)
            return c.getInt(0);
        else
            return 0;
    }

    public String GetUserUserName(String tableName,String emailId) {
        String where = COLUMN_USER_EMAIL+" LIKE '%"+emailId+"%'";
        Cursor c = db.query(true, tableName, null,
                where, null, null, null, null, null);
        if(c.getCount()>0)
            return c.getString(1);
        else
            return null;
    }


    public static class AppDatabaseHelper extends SQLiteOpenHelper {
        AppDatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase _db) {
            _db.execSQL(CREATE_USER_TABLE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading application's database from version " + oldVersion
                    + " to " + newVersion + ", which will destroy all old data!");
            // Destroy old database:
            _db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER);
            // Recreate new database:
            onCreate(_db);
        }
    }

}

您必须像这样在 Activity 中调用 DatabaseHelper

private DatabaseHelper databaseHelper;
databaseHelper = new DatabaseHelper(context.getApplicationContext());
            databaseHelper.open();

像这样从本地数据库获取值

if (databaseHelper.checkIfUserExit(databaseHelper.TABLE_USER , textInputEditTextEmail.getText().toString().trim())){
        Intent accountsIntent = new Intent(activity, UsersActivity.class);
        accountsIntent.putExtra("NAME",    
 databaseHelper.GetUserUserName(databaseHelper.TABLE_USER ,textInputEditTextEmail.getText().toString().trim()));
        String ID = String.valueOf(databaseHelper.GetUserID(databaseHelper.TABLE_USER ,textInputEditTextEmail.getText().toString().trim()));
        accountsIntent.putExtra("ID", ID);
        emptyInputEditText();
        startActivity(accountsIntent);
    } else {
        Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
    }