2017-09-21 52 views
0

我做了一个SQLite登录和注册应用程序。成功登录后,我希望用户看到一个TextView他/她看到“欢迎USER_NAME”和“您的ID号:USER_ID并通过USER_ID我想看到rowid的如何从SQLite数据库获取用户ID(Rowid)并在TextView中显示它(Android)

这里是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搞砸。它显示我“您的ID号:空”

我找不到任何解决方案,所以我在这里发布。 如何获取用户标识,必须是INTEGER PRIMARY KEY AUTOINCREMENT并将其显示为字符串。但是为了使它更加复杂,我还需要将用户标识作为int/long用于其他功能(转换为二进制代码,...)。

+0

为什么你写的数据库,而不是可读的数据库,在getUserId( ) 方法? – Hetfieldan24

+0

@ Hetfieldan24我尝试过两种都不行。 – flash17

+0

当你使用'DatabaseUtils#dumpCursor()'方法时,你会看到什么? – pskink

回答

0

你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); 
     } 
    } 

} 

你必须从你的本地数据库调用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(); 
    } 
+0

非常感谢。我根本没有想过这个结构。在一段视频中,它是这样显示的,所以我只是保持这样。但无论如何,我会改变它来改善应用程序。 – flash17

1

试试这个:

更换

cursor.getLong(0); 

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

UPD: 也可以尝试删除此:

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

并更换

idIntent.putExtra("ID", ID); 

accountIntent.putExtra("ID", ID); 
相关问题