2017-04-08 58 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

相关问题