无法访问私有TABLE_USER,导致无法从SQLite获取用户ID的问题
问题:无法访问DatabaseHelper类中的私有TABLE_USER成员
你在DatabaseHelper类中实现了获取用户ID的方法:
/** * This method is to fetch user id after login or register */ public int GetUserID(String tableName,String emailId) { SQLiteDatabase db= this.getReadableDatabase(); 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; }
但在Activity中调用时,因为TABLE_USER是DatabaseHelper的私有成员,导致无法访问:
databaseHelper = new DatabaseHelper(getApplicationContext()); int usr_id = String.valueOf(databaseHelper.GetUserID(databaseHelper.TABLE_USER,textInputEditTextEmail.getText().toString().trim()));
解决方案
你忽略了Java的封装访问规则——私有成员只能在类内部访问,外部类无法直接调用。这里有几种常用的修复方式,按最佳实践排序:
1. 添加公共Getter方法(推荐的封装做法)
在DatabaseHelper类中为私有TABLE_USER添加一个公共的getter方法,这样既保持了封装性,又能让外部安全获取表名:
// 在DatabaseHelper类中添加 public String getTableUser() { return TABLE_USER; }
然后在Activity中调用时替换为:
int usr_id = databaseHelper.GetUserID(databaseHelper.getTableUser(), textInputEditTextEmail.getText().toString().trim());
2. 将TABLE_USER改为公共静态常量
因为表名通常是固定不变的常量,很多Android数据库工具类会把表名、列名定义为public static final,方便外部直接引用:
// 在DatabaseHelper类中修改TABLE_USER的修饰符 public static final String TABLE_USER = "your_table_name_here";
调用时可以直接通过类名访问(不需要依赖实例):
int usr_id = databaseHelper.GetUserID(DatabaseHelper.TABLE_USER, textInputEditTextEmail.getText().toString().trim());
3. 硬编码表名字符串(不推荐)
虽然可以直接传入表名的字符串字面量,但这种方式后期维护成本高,一旦表名修改,所有硬编码的地方都要改,容易出错,所以不建议使用:
int usr_id = databaseHelper.GetUserID("user_table", textInputEditTextEmail.getText().toString().trim());
额外小提醒
你的调用代码里还有一个编译错误:GetUserID返回的是int类型,但你用String.valueOf()转换后赋值给int usr_id,这会导致类型不匹配。直接去掉String.valueOf()即可:
// 正确的写法 int usr_id = databaseHelper.GetUserID(/* 表名参数 */, textInputEditTextEmail.getText().toString().trim());
内容的提问来源于stack exchange,提问作者Angelbreath
相关产品推荐
相关产品推荐

