Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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
Java 为什么来自SQLite的Android游标赋值返回0表示true_Java_Android_Sqlite_Cursor_Android Sqlite - Fatal编程技术网

Java 为什么来自SQLite的Android游标赋值返回0表示true

Java 为什么来自SQLite的Android游标赋值返回0表示true,java,android,sqlite,cursor,android-sqlite,Java,Android,Sqlite,Cursor,Android Sqlite,我正在开发一个Android应用程序,在学习的同时,它访问一个SQLite数据库,该数据库在列中保存一些布尔数据(以及其他数据),但我对布尔数据是如何表示的感到困惑 据我所知,就SQLite而言,0为false,1为true。这是我关于我的问题的搜索结果(两个例子见和) 关于我的特殊问题,我正在查询的表有两个布尔列,在有问题的行中,这两个列此时都是“true”。然而,当我在我的应用程序中分配这些列的值时,它们是“false”。以下是代码术语中的场景 SQLiteDatabase db = get

我正在开发一个Android应用程序,在学习的同时,它访问一个SQLite数据库,该数据库在列中保存一些布尔数据(以及其他数据),但我对布尔数据是如何表示的感到困惑

据我所知,就SQLite而言,0为false,1为true。这是我关于我的问题的搜索结果(两个例子见和)

关于我的特殊问题,我正在查询的表有两个布尔列,在有问题的行中,这两个列此时都是“true”。然而,当我在我的应用程序中分配这些列的值时,它们是“false”。以下是代码术语中的场景

SQLiteDatabase db = getReadableDatabase();
String[] result_cols = new String[] { KEY, FD_CONTACT_FNAME, FD_CONTACT_SNAME, FD_IS_PUPIL, FD_IS_ACTIVE };
String where = KEY + " = ?";
String whereArgs[] = {id};
String groupBy = null;
String having = null;
String order = null;

Cursor cursor = db.query(DB_TABLE_CONTACTS, result_cols, where, whereArgs, groupBy, having, order);
Log.d("ACONTACT", DatabaseUtils.dumpCursorToString(cursor));

while (cursor.moveToNext()) {
    int three = cursor.getInt(3);
    int four = cursor.getInt(4);

    if (cursor.getInt(3) == 1) {
        Log.d("ONE", "1");
    } else if (cursor.getInt(3) == 0) {
        Log.d("ZERO", "0");
    }

    Contact mContact = new Contact(cursor.getLong(0), cursor.getString(1), cursor.getString(2), ((cursor.getInt(3) == 1)? true : false), (cursor.getInt(4) > 0));
    Log.d("ACONTACT", String.valueOf(mContact.getIsPupil()) + " .... " + String.valueOf(mContact.getIsActive()));
    Log.d("ACONTACT", String.valueOf(cursor.getInt(3)) + " .... " + String.valueOf(cursor.getInt(4)));
    Log.d("ACONTACT", cursor.getString(1) + " .... " + cursor.getString(2));
    Log.d("ACONTACT", String.valueOf(cursor.getLong(0)));
    return  mContact;
}
代码的日志方面会导致:

D/ACONTACT: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@418c5f28
        0 {
           _id=24
           fname=Harry
           sname=Ballard
           is_pupil=true
           is_active=true
        }
        <<<<<
D/ZERO: 0
D/ACONTACT: false .... false
D/ACONTACT: 0 .... 0
D/ACONTACT: Harry .... Ballard
D/ACONTACT: 24
我可以从日志中看出,当光标被“DatabaseUtils”转储时,它是正确的,但当我将光标值读入我的类或任何其他用于调试的变量时,它们似乎是错误的(例如,在赋值后,int'three'和int'three'均为零,因此为false)。其他三列中的数据始终正确

很明显,我遗漏了一些东西,但在我看来,游标保存了正确的数据(两个布尔列,它们的值都是true,正如游标转储所示),但是cursor.getInt(3)和cursor.getInt(4)都返回零,即false。光标看起来如何变化,它在做我的头:)

尽管如此,我的标题可能并不准确,因为光标一开始是正确的,但后来出了问题。有人知道什么吗?

当说明“布尔值存储为整数0(false)和1(true)”,那么它的确切意思是:必须将它们存储为数字
0
1


此时,您正在数据库中存储字符串
true
false
。这些值不能转换成整数。

好的,我为这噪音道歉。布尔数据是使用文本值“true”和“false”插入数据库的。因此,使用整数逻辑('cursor.getInt(0)>0'或等效值)来确定true或false总是返回false,因为所持有的值实际上是'true'而不是'1'


我希望这是清楚的。再次为这噪音道歉

是的,谢谢。太多的“早起”时间盯着屏幕。
    public Contact( long id, String fname, String sname, Boolean isPupil, Boolean isActive ) {
    this.id = id;
    this.fname = fname ;
    this.sname = sname ;
    this.isPupil = isPupil;
    this.isActive = isActive;
}