2017-04-08 61 views
1

當用戶可以註冊並記錄他們的用戶名和密碼時,我已經實現了登錄和註冊系統。現在,我不知道如何開始解決這個問題。如何在Android用戶登錄應用程序時保存數據?

我想保存數據,無論他或她在應用程序中做什麼,只爲該用戶存在,並且不會與其他用戶的數據相沖突(如果這樣做有所意義的話)。

所以,我的應用程序有一個主表數據庫(USER_INFO)有3個列,ID,名稱和密碼。

我的問題是,如何爲特定用戶實現對SQLite的保存方法? 我應該在我的master db下創建另一個表嗎?如何? 如果我有第二個表,我應該用USER_INFO表連接嗎?

試圖從谷歌機器人閱讀,但不真的在那裏回答我這個問題。

+0

要保存什麼?哪些數據? –

+0

用戶數據。就像,做筆記,用戶搜索等等,用戶將創建的任何類型的數據 – Lwq

+0

您想要保存,就像下次訪問數據庫時一樣? –

回答

0

您可以使用相同的表,如下所示:

1)你的實體對象

public class UserInfo { 
    int id; // will be auto-increamted 
    String name; 
    String password; 

    public UserInfo(int id, String name, String password) { 
     this.id = id; 
     this.name = name; 
     this.password = password; 
    } 
// getter/setters ... 
} 

2)你的sqlite的實用對象,像(注意,您可以添加更多的表,如你所願) :

public class SQLiteDBAdapter { 

    protected static final String DATABASE_NAME = "mydb"; 
    protected static final int DATABASE_VERSION = 1; 

    protected Context context; 
    protected static DatabaseHelper mDbHelper; 

    public static final String TABLE_USER_INFO = "tbl_userinfo"; 
    // columns 
    public static final String USER_ID = "_id"; 
    public static final String NAME = "name"; 
    public static final String PASSWORD = "password"; 
    // create table string 
    private static final String CREATE_TABLE_USER_INFO = 
      "CREATE TABLE if not exists " + TABLE_USER_INFO + " (" + 
        USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        NAME + " TEXT NOT NULL, " + 
        PASSWORD + " TEXT NOT NULL);"; 

    public SQLiteDBAdapter(Context context) { 
     context = context.getApplicationContext(); 
    } 

    public SQLiteDatabase openDb() { 
     if (mDbHelper == null) { 
      mDbHelper = new DatabaseHelper(mContext); 
     } 
     return mDbHelper.getWritableDatabase(); 
    } 

    protected static class DatabaseHelper extends SQLiteOpenHelper { 
     // ------------------------------------------------------------------------------------------- 
     public DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 
     // ------------------------------------------------------------------------------------------- 
     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(CREATE_TABLE_USER_INFO); 
     } 
     // ------------------------------------------------------------------------------------------- 
     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + 
        newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS routes"); 
      onCreate(db); 
     } 
    } 
} 

3)擴大一個SQLite對象來操作表(CRUD操作):

public class UserInfoDbAdapter extends SQLiteDBAdapter { 

    private SQLiteDatabase db; 

    // these are column corresponding indices 
    public static final int INDEX_ID = 0; // an auto-increment 
    public static final int INDEX_NAME = 1; 
    public static final int INDEX_PASSWORD = 2; 

    public UserInfoDbAdapter(Context context) { 
     super(context); 
    } 

    public void add(String name, String password) { 
     db = openDb(); 
     ContentValues values = new ContentValues(); 
     values.put(NAME, name); 
     values.put(PASSWORD, password); 
     db.insert(TABLE_USER_INFO, null, values); 
    } 

    public void update(String name, String password) { 
     db = openDb(); 
     ContentValues values = new ContentValues(); 
     values.put(NAME, name); 
     values.put(PASSWORD, password); 
     db.update(TABLE_USER_INFO, values, null); 
    } 

    public void deleteAll() { 
     db = openDb(); 
     db.delete(TABLE_USER_INFO, null, null); 
    } 

    public boolean isEmpty() { 
     db = openDb(); 
     boolean empty = true; 
     Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_USER_INFO, null); 
     if (cursor != null && cursor.moveToFirst()) { 
      empty = (cursor.getInt (0) == 0); 
     } 
     cursor.close(); 
     return empty; 
    } 

    public UserInfo fetchRecord() { // only one record to fetch 
     db = openDb(); 
     Cursor cursor = db.query(TABLE_USER_INFO, new String[]{USER_ID, NAME, PASSWORD}, 
       null, null, null, null, null, null); 
     if (cursor != null && 
      cursor.moveToFirst()) { 
      return new UserInfo(
        cursor.getInt(INDEX_ID), 
        cursor.getString(INDEX_NAME), 
        cursor.getInt(INDEX_PASSWORD)); 
     } 
     return null; 
    } 
} 

4)最後,添加/更新/刪除/根據需要獲取用戶記錄...

public class MainActivity extends AppCompatActivity { 
    private UserInfoDbAdapter userDB; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     // initialize user db 
     userDB = new UserInfoDbAdapter(this); 

     // add user if table is empty 
     if (userDB.isEmpty() { 
      // add user 
      userDB.add(nameTextView.getText().toString(), passwordTextView.getText().toString()); 
// note it's always more secure to store encrypted password, rather than plain text. 
     } else { 
      // update 
      userDB.update(nameTextView.getText().toString(), passwordTextView.getText().toString()); 
     } 

    } 
    ... 
    // fetch record 
    public UserInfo fetchRecord() { 
     return userDB.fetchRecord(); 
    } 
} 
+0

真的很感激。 – Lwq

相關問題