2017-09-21 51 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); 
相關問題