android - 如何从 Mainactivity 类中的每个函数检索 sqlite 数据库

标签 android sqlite

我是新手,正在研究 Android 应用程序。
我想要实现的是,在 Layout 1 中,一个 Dialog 出现在单击按钮时,并从 SQLite 中检索所需的数据(名称、地址、编号等)数据库并显示检索到的数据。
所以我的问题是我是否必须再次创建一个 SQLite Cursor 数据库,或者我可以使用以下代码以更简单的方式实现它?

这是我的代码

@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();
}   

任何帮助将不胜感激。谢谢

最佳答案

首先创建一个扩展 SQLiteOpenHelper 的类,然后定义静态方法以从任何 Activity 或 fragment 调用它们。

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;
 }

}

然后在您的 Activity 或 fragment 中,您可以初始化数据库并调用该方法。

DBHelper db = new DBHelper(context);

DBHelper db = new DBHelper(getActivity());

然后

db.getUser("specific_username")

关于android - 如何从 Mainactivity 类中的每个函数检索 sqlite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580892/

相关文章:

c# - SQLite 错误 14 : 'unable to open database file' if in root folder

android - SQLiteConstraintException : error code 19: constraint failed

android - 当我使用 onItemClickListener 时如何获取 ListView 中的项目

android - 如何检测Android设备中的芯片组信息?

java - 执行 sqlite 查询,没有任何反应

sql - 使用SQLite合并数据

c# - 无法连接到 Android 上的 TCP 端口

android - 如何以编程方式使用 MotionLayout 触发动画?

android - 屏幕关闭时后台服务不运行

android - 向 ViewSwitcher 添加两个以上的 View