Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序启动时以编程方式调用rawQuery_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 应用程序启动时以编程方式调用rawQuery

Android 应用程序启动时以编程方式调用rawQuery,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我们有两个类MainActivity和一个DBHelper DBHelper创建数据库和两个表一个表,masterPW,它只有一行两列,ID和ColPW。一旦创建并插入数据,此表将只包含一条记录 应用程序启动时,ColPW列将为空或null 第一次 我们希望在应用程序启动时以编程方式调用rawQuery,并将ColPW列的值设置为String 如果字符串变量为null或空,则显示MainActivity 两个EditText字段和保存按钮。如果字符串变量 来自ColPW列的数据。Main活动将仅

我们有两个类MainActivity和一个DBHelper

DBHelper
创建数据库和两个表一个表,
masterPW
,它只有一行两列,
ID
ColPW
。一旦创建并插入数据,此表将只包含一条记录

应用程序启动时,
ColPW
列将为空或null 第一次

我们希望在应用程序启动时以编程方式调用
rawQuery
,并将
ColPW
列的值设置为
String

如果字符串变量为null或空,则显示
MainActivity
两个
EditText
字段和保存按钮。如果字符串变量 来自
ColPW
列的数据。Main活动将仅显示一个 编辑文本字段和ENTER按钮

作为一名真正的Android新手,我在这里不知所措,不知道如何让 应用程序以编程方式调用
rawQuery
。我应该将
rawQuery
放在哪里

如果查询结果在
DBHelper
类中,如何发送 将结果发送到
main活动
?意图、全局单例类或 使用带有getter和setter以及适配器类的模型类

我已经用DerbyDB和JavaFX写了这篇文章,但是我可以打开 并创建表,查询同一类中的所有表

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {

        Button btnSave;
        Button btnEnter;
        TextView tvPW;
        TextView tvCPW;
        EditText etPW;
        EditText etCPW;
        int x = 1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
            setContentView( R.layout.activity_main );
            tvPW = (TextView) findViewById( R.id.tvPW );
            tvCPW = (TextView) findViewById( R.id.tvCPW );
            etPW = (EditText) findViewById( R.id.etPW );
            etCPW = (EditText) findViewById( R.id.etCPW );

            btnEnter = (Button) findViewById( R.id.btnEnter );
            btnSave = (Button) findViewById( R.id.btnSave );
            addListenerOnButtonSave();

            DBHelper dbHelper = new DBHelper( this );
            String str = dbHelper.getCol_PW();
            if (str == null || str.isEmpty()) {
                System.out.println( "I am null" );
            } else {
                System.out.println( "I am NOT NULL" );
            }
        }

        private void addListenerOnButtonSave() {
        btnSave.setOnClickListener( new View.OnClickListener() {

       @Override
       public void onClick(View v) {

       if (x == 1) {
       btnSave.setVisibility( View.INVISIBLE );
       btnEnter.setVisibility( View.VISIBLE );
       tvCPW.setVisibility( View.INVISIBLE );
       etCPW.setVisibility( View.INVISIBLE );
       etPW.requestFocus();
       setTitle( "Enter Password" );

       }

       }
       } );
       }
    }
    import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "PassWord";
    public static final Integer DB_VERSION = 1;

    public static final String TABLE_NAME = "masterPW";
    public static final String Col_ID = "ID";
    public static final String Col_MPW = "mpw";

    private static final String MAKE_TABLE = "CREATE TABLE " +  TABLE_NAME +
            "(" + Col_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Col_MPW + " TEXT" + ")";

    SQLiteDatabase db;


    public DBHelper(Context context){
        super(context,DB_NAME,null,DB_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( MAKE_TABLE );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        db.execSQL(MAKE_TABLE);
    }

    public String getCol_PW(){
        String str = null;
        String q = "SELECT mpw FROM masterPW";
        Cursor cursor = db.rawQuery(q,null);
        if(cursor.moveToFirst()){
            str = cursor.getString(cursor.getColumnIndex(Col_MPW));
        }
        return str;
    }
}

在MainActivity onCreate中,尝试执行以下操作:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DBHelper dbHelper = new DBHelper(this);
    String str = dbHelper.getColPW();
    if(str == null || str.isEmpty()){
        //display 2 edittext
    } else {
        //display 1 edittext
    }

}
在DBHelper.java中:

private SQLiteDatabase myDataBase;
public String getColPW(){
    String str = null;
    myDataBase = getWritableDatabase();
    Cursor cursor = myDataBase.rawQuery("select " + COL_MPW + " from " + TABLE_NAME, null);
    if(cursor.moveToFirst()){
        str = cursor.getString(cursor.getColumnIndex(COL_MPW));
    }
    return str;
}

如果您有问题,请在评论中提问。

那么我仍然在DBHelper类中创建数据库和表吗?以及MainActivity DBHelper DBHelper=new DBHelper(this)和字符串str=DBHelper.getColPW()中的代码行;将在DBHelper类中执行该方法如果有效,我将对此进行一次尝试投票。我的另一个问题是线程保存?您可以发布您的DBHelper类吗?应该是
“select mpw”
“select”+DBHelper.Col\u mpw+“from…”
什么错误代码?请发布更新后的DBHelper和MainActivity。db变量可能为null,我认为在调用rawQuery()之前必须对其进行初始化,如db=getWritableDatabase()。请查看更新的代码,如示例所示。一个getter-insidedbhelper。这才是你真正需要的。然后,在活动的
onCreate
内创建一个
DBHelper
实例。不需要单身。SQLite不处理意图。欢迎您为某种ORM目的创建一个模型,但这对于您在这里的目的不是必需的