2017-04-08 2 views
1

ユーザーがユーザー名とパスワードを登録してログオンできるときに、ログインと登録システムを実装しました。今、私はこの問題から始める方法もわかりません。ユーザーがAndroidのアプリにログインしたときにデータを保存するにはどうすればよいですか?

私は、自分がアプリでやっていることに関係なく、そのユーザーのためだけにデータを保存し、それが他のユーザーとデータに衝突しないようにしたいと考えています。

私のアプリには、3つの列、ID、NAME、およびPASSWORDを持つテーブル(USER_INFO)を持つ1つのマスターデータベースがあります。

私の質問は、どのように特定のユーザーのためにSQLiteにメソッドを保存する実装ですか? 私はマスターデータベースの下に別のテーブルを作成する必要がありますか?そしてどうやって? 私はUSER_INFOテーブルに接続する必要があります2番目のテーブルがある場合?

Googleアンドロイドから読もうとしましたが、本当にこの質問には答えません。

+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)がテーブル(CRUD操作)を操作するSqliteをオブジェクトを拡張:

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

関連する問題