2017-08-09 18 views
1

私は初心者ですし、アンドロイドアプリを勉強しています。
私が達成したいのは、Layout 1に、Dialogがボタンクリックで表示され、SQLiteデータベースから必要なデータ(名前、アドレス、番号など)を取得し、その取得したデータを表示することです。
私の質問は、SQLite Cursorデータベースをもう一度作成する必要があるのか​​、それとも簡単な方法でこれを次のコードを使って実現できるのかということです。

は、ここですべてのヘルプは高く評価されるだろうMainactivityクラスの各関数からsqliteデータベースを取得する方法

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setting_user); 
    setTitle("Setting User"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    sqLiteDataBase = new SQLiteDataBase(this); 
    Cursor cursor = sqLiteDataBase.get_user(); 
    cursor.moveToFirst(); 
    String name = cursor.getString(cursor.getColumnIndex(nm_us)); 
    String addres = cursor.getString(cursor.getColumnIndex(add_us)); 
    String telp = cursor.getString(cursor.getColumnIndex(tlp_us)); 
    String answer = cursor.getString(cursor.getColumnIndex(ans_us)); 
    String question = cursor.getString(cursor.getColumnIndex(que_us)); 

    name_user = (EditText)findViewById(R.id.nameUser); 
    addres_user = (EditText)findViewById(R.id.addresUser); 
    telp_user = (EditText)findViewById(R.id.telpUser); 
    answer_user = (EditText)findViewById(R.id.answerUser); 
    question_user = (EditText)findViewById(R.id.questionUser); 
    btnUpdate = (Button)findViewById(R.id.btnUpdate); 

    name_user.setText(name); 
    addres_user.setText(addres); 
    telp_user.setText(telp); 
    answer_user.setText(answer); 
    question_user.setText(question); 

    btnUpdate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ShowConfirm(); 
     } 
    }); 
} 


private void ShowConfirm() { 
    //I call the database again, is there an easier way 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setting_user); 
    setTitle("Update User"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    sqLiteDataBase = new SQLiteDataBase(this); 
    Cursor cursor = sqLiteDataBase.get_user(); 
    cursor.moveToFirst(); 
    String answer = cursor.getString(cursor.getColumnIndex(ans_us)); 
    String question = cursor.getString(cursor.getColumnIndex(que_us)); 

    LayoutInflater layoutInflater = LayoutInflater.from(SettingUser.this); 
    View promptView = layoutInflater.inflate(R.layout.dialog_security_user, null); 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SettingUser.this); 
    alertDialogBuilder.setTitle("Question Security"); 
    alertDialogBuilder.setMessage(question); 
    alertDialogBuilder.setView(promptView); 

    final EditText question_text = (EditText) promptView.findViewById(R.id.jawabanSecurity); 

    alertDialogBuilder.setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        if ((question_text.getText().toString().equals(question))) { 
         ShowUpdatepass(); 
        }else if ((question_text.getText().toString().equals(""))) { 
         Toast.makeText(SettingUser.this, "No zero", Toast.LENGTH_SHORT).show(); 
        }else { 
         Toast.makeText(SettingUser.this, "wrong", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 

    AlertDialog alert = alertDialogBuilder.create(); 
    alert.show(); 
} 

私のコードです。ありがとう

+0

それが問題であるか、値の数を扱うなら、カーソルはそれが複雑で保持しているカーソルだ場合はおそらく考えます。おそらくカーソルよりも 'getUser()'から返されたユーザオブジェクト(存在する場合)が問題を単純化できるか? – MikeT

答えて

1

最初に、SQLiteOpenHelperを拡張するクラスを作成し、次に任意のアクティビティまたはフラグメントから呼び出す静的メソッドを定義します。

public class DBHelper extends SQLiteOpenHelper { 

public DBHelper(Context context) { 
    super(context, "database.db", null, 1); 
} 


@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    sqLiteDatabase.execSQL(User_columns_name.CREATE_TABLE_QUERY); 

    } 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    } 

    public static abstract class User_columns_name implements BaseColumns { 
    public static final String TABLE_NAME = "users"; 
    public static final String COLUMN_NAME_EMAIL = "email"; 
    public static final String COLUMN_NAME_phone = "phone"; 
    public static final String COLUMN_NAME_PASSWORD = "password"; 
    public static final String COLUMN_NAME_FIRST_NAME = "first_name"; 
    public static final String COLUMN_NAME_LAST_NAME = "last_name"; 
    public static final String COLUMN_NAME_USER_NAME = "user_name"; 
    public static final String COLUMN_NAME_ACTIVE = "active"; 
    public static final String COLUMN_NAME_GENDER = "gender"; 
    public static final String COLUMN_NAME_PROFILE_IMAGE = "profile_image"; 
    public static final String COLUMN_NAME_PROVINCE = "province"; 
    public static final String COLUMN_NAME_CITY = "city"; 
    public static final String COLUMN_NAME_ABOUT_ME = "about_me"; 
    public static final String COLUMN_NAME_INSTITUTE = "institute"; 
    public static final String COLUMN_NAME_MOBILE = "mobile"; 
    public static final String COLUMN_NAME_BIRTHDAY = "birthday"; 
    public static final String COLUMN_NAME_USER_TYPE = "user_category"; 


    public static final String CREATE_TABLE_QUERY = "CREATE TABLE IF NOT EXISTS " + User_columns_name.TABLE_NAME + " (" + 
      "id integer primary key, " + 
      User_columns_name.COLUMN_NAME_EMAIL + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_phone + " TEXT NOT NULL," + 
      User_columns_name.COLUMN_NAME_PASSWORD + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_FIRST_NAME + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_LAST_NAME + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_USER_NAME + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_PROFILE_IMAGE + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_ACTIVE + " INTEGER NOT NULL, " + 
      User_columns_name.COLUMN_NAME_PROVINCE + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_CITY + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_INSTITUTE + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_MOBILE + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_ABOUT_ME + " TEXT NOT NULL, " + 
      User_columns_name.COLUMN_NAME_GENDER + " INTEGER NOT NULL, " + 
      User_columns_name.COLUMN_NAME_USER_TYPE + " INTEGER NOT NULL, " + 
      User_columns_name.COLUMN_NAME_BIRTHDAY + " TEXT NOT NULL" + 
      ");"; 
    public static final String DELETE_TABLE_QUERY = "DROP TABLE IF EXISTS " + User_columns_name.TABLE_NAME; 
    } 


public User getUser(int user_name) { 
    User user = null; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery("select * from " + 
    User_columns_name.TABLE_NAME + " where " 
    User_columns_name.COLUMN_NAME_USER_NAME 
    " = " + user_name+ " ", null); 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 
    user = new User(); 
    user.setUserName(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_USER_NAME))); 
     user.setPassword(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_PASSWORD))); 
     user.setFirstName(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_FIRST_NAME))); 
     user.setLastName(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_LAST_NAME))); 
     user.setEmail(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_EMAIL))); 
     user.setActive(cursor.getInt(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_ACTIVE))); 
     user.setGender(cursor.getInt(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_GENDER))); 
     user.setPhone(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_phone))); 
     user.setProfileImage(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_PROFILE_IMAGE))); 
     user.setAboutMe(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_ABOUT_ME))); 
     user.setMobile(cursor.getString(cursor.getColumnIndex(User_columns_name.COLUMN_NAME_MOBILE))); 
     //other attributes 
     cursor.moveToNext(); 
     } 
    cursor.close(); 
    return user; 
} 

} 

次に、データベースを初期化してメソッドを呼び出すことができます。

DBHelper db = new DBHelper(context); 

または

DBHelper db = new DBHelper(getActivity()); 

その後、

db.getUser("specific_username") 
関連する問題