Android 游标getInt返回负值

Android 游标getInt返回负值,android,sql,integer,Android,Sql,Integer,首先,我想注意到英语不是我的母语,不管怎样,我希望我们不会有误解 我在Android上编写了一个简单的应用程序,发现了一个问题,也解决了它,但无论如何,我想了解它的原因 我创建了一个sql表: public static final String CREATE_TABLE_ENTRIES = " CREATE TABLE " + TABLE_ENTRIES + " ( " + KEY_ID + " TEXT PRIMARY KEY, " + " c

首先,我想注意到英语不是我的母语,不管怎样,我希望我们不会有误解

我在Android上编写了一个简单的应用程序,发现了一个问题,也解决了它,但无论如何,我想了解它的原因

我创建了一个sql表:

public static final String CREATE_TABLE_ENTRIES = " CREATE TABLE "
            + TABLE_ENTRIES + " ( " + KEY_ID + " TEXT PRIMARY KEY, "
            + " content " + " TEXT, "
            + " title" + " TEXT, "
            + " image " + " TEXT, "
            + " date " + " INTEGER, " + ")";
并以这种方式将数据放入其中:

SQLiteDatabase db = mStorage.getWritableDatabase();
ContentValues tempValues = new ContentValues();
tempValues.put("id", entry.id);
tempValues.put("content", entry.content);
tempValues.put("title", entry.title);
tempValues.put("image", entry.image);
tempValues.put("date", entry.date);  // int date; I use Unix time
db.insert(contentType, null, tempValues);
现在。。一切正常,我使用验证,存储的值是正确的

然而,当我尝试使用
cursor.getInt(cursor.getColumnIndex(“date”))
获取日期值时,我得到了1)错误的值2)它的负值(如-1004124)

所以,我试着用getLong和voila来代替它!我有时间


问题是-getInt在这里有什么问题?

您在该数据库字段中输入的值必须大于2^31-1,即max
int
正值。由于
int
type是一个有符号整数,如果最左边的位(位置32)是1,则该值被解释为负值


当您将值加载为
long
时,所有位的解释都不同,表示一个正长数。

您确定使用的是unixtime(自历元起的秒数),而不是Java系统时间(自历元起的毫秒数)

例如,unixtime
138723645
非常适合32位int


但是,毫秒戳
138723645000
对于32位来说太大。十六进制是
0x142fd9191c8
。取下底部的32位,我们将得到
0xfd9191c8
,当解释为Java
int
时,它是十进制的
-40791608
,即有符号2的补码32位整数。

您保存到该字段的值是多少?@Szymon我正在输入unix时间,正如我现在从wiki上知道的1387233645,所以,从2^32-1开始,它几乎不到两倍。我重新检查了这些值,并以毫秒为单位进行了存储。失败:D我也没有检查我的对象类型-它的
long
int
,就像我在问题中写的那样