【问题标题】:Getting Data from Cursor从光标获取数据
【发布时间】:2015-04-18 15:59:50
【问题描述】:

我需要做的是在某个商店中为某个用户获取积分,我运行这个;

                Cursor cursor1 = myDB.checkPointss(email, name);
                String one = cursor1.getString(cursor1.getColumnIndex("POINTS"));

                scanText.setText("barcode resueeeelt " + one);

这就是方法;

public Cursor checkPointss(String email, String name) {
    Cursor c = db.rawQuery("SELECT * FROM compdata WHERE EMAIL= ? AND NAME=?", new String[] {email, name});
    if (c != null) {
        c.moveToFirst();
    }
    return c;

}

每次我尝试登录页面时,它都会因为试图获得积分而崩溃?我尝试了很多不同的代码,但似乎都没有。

所以我只想让它找到包含该用户名和商店名称的行的积分,然后将一定数量添加到积分并更新数据库。

02-18 20:07:42.694  15570-15570/com.adventorious.quickrewards E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.adventorious.quickrewards, PID: 15570
    java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
            at android.database.CursorWindow.nativeGetString(Native Method)
            at android.database.CursorWindow.getString(CursorWindow.java:439)
            at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
            at com.adventorious.quickrewards.Scan$3.onPreviewFrame(Scan.java:155)
            at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1016)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5602)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)

这行得通;

public boolean checkPoints(String email, String name){
    Cursor c = db.rawQuery("SELECT POINTS FROM compdata WHERE EMAIL= ? AND NAME=?", new String[] {email, name});
    if(c.moveToFirst()) {
        return true;
    }  else {
        return false;

    }
}

那么为什么不能获取数据呢?

【问题讨论】:

  • 每次我尝试登录页面时,它都会崩溃..如果我在你里面,我会修复崩溃
  • @Blackbelt 因为积分而崩溃?帮忙?
  • 我怎么知道呢?你可以发布堆栈跟踪吗?
  • col -1 表示您的表中没有POINTS 列。
  • @Marcus:没有。这就是 ? 和后续参数的用途。

标签: android sqlite android-cursor


【解决方案1】:

getColumnIndex() 区分大小写,而 SQL 不区分。

如果该列在表中是小写的,则在SELECT * 结果集中它将是小写的,并且尝试使用大写的列名来检索它是行不通的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2016-10-10
    相关资源
    最近更新 更多