簡體   English   中英

為什么從SQLite分配Android游標會為true返回0

[英]Why is the assignment of Android cursor from SQLite returning 0 for true

在學習的同時,我正在開發一個Android應用程序,該應用程序訪問一個SQLite數據庫,該數據庫在列中保存了一些布爾數據(以及其他數據),但是我對布爾數據的表示方式感到困惑。

據我了解,出於SQLite的目的,0為false,1為true。 對於我的問題,這是我搜索的結果(有關兩個示例,請參見從數據庫使用AndroidSQLite 獲取布爾值SQLite文檔 )。

關於我的特定問題,我正在查詢的表具有兩個布爾列,並且在所討論的行中,這兩個列在此刻均為“ 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

“聯系人”是一個自定義類,沒有什么復雜的,它具有類似的構造函數;

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

從日志記錄中我可以看到,當游標被“ DatabaseUtils”轉儲時,游標是正確的,但是當我將游標值讀入我的類或任何其他用於調試的變量時,它們顯示為錯誤(int'three'和int例如,“四”保持零,因此賦值后為假)。 其他三列中的數據始終正確。

我顯然丟失了一些東西,但是正如我看到的那樣,游標保存了正確的數據(兩個布爾列,都具有'true'值,如游標轉儲所示),然后是cursor.getInt(3)和cursor.getInt( 4)兩者都返回零,即false。 光標看起來如何改變,它正在:)

說了這么多,我的標題可能不正確,因為光標最初是正確的,但隨后出了點問題。 有人對什么有任何線索嗎?

文檔中說“布爾值存儲為整數0(false)和1(true)”時,這恰恰意味着:您必須將它們存儲為數字01

目前,您正在將字符串 truefalse存儲在數據庫中。 這些值不能轉換為整數。

好的,我很抱歉聽到這個聲音。 使用文字值“ true”和“ false”將布爾數據插入數據庫中。 因此,使用整數邏輯('cursor.getInt(0)> 0'或等效值)來確定true或false總是返回false,因為所保存的值實際上是'true'而不是'1'。

我希望這很清楚。 再次,對噪聲表示歉意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM