Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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游标索引越界异常_Android_Sqlite_Cursor - Fatal编程技术网

Android游标索引越界异常

Android游标索引越界异常,android,sqlite,cursor,Android,Sqlite,Cursor,这段代码有什么问题吗?我想用条形码查询数据,它会显示游标索引越界异常 public String getIdByBarcode(String ss) throws SQLException{ String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date}; Cursor c = ourData

这段代码有什么问题吗?我想用条形码查询数据,它会显示游标索引越界异常

public String getIdByBarcode(String ss) throws SQLException{
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + "= '" + ss + "' " , null, null, null, null);

    if(c != null){
        c.moveToFirst();
        String id = c.getString(0);
        Log.v(id, id + "Id" );
        return id;
    }
    return null;
}
试试这个

String id;
if (c!= null && c.moveToNext){
   String id = c.getString(0);
   return id;   
 }

光标中没有结果。您应该检查
moveToFirst()
返回的内容(很可能是
false
)。您还应该使用
moveToNext()
,而不是
moveToFirst()
。还要注意不要检查
ss
参数。这可能导致SQL注入漏洞。您应该使用参数。另外,我认为你可以在你的方法中使用单一回报

public String getIdByBarcode(String ss) throws SQLException {
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    final String args = new String[1];
    args[0] = ss;
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + " = ?" , args, null, null, null);
    String ret = null;
    if(c.moveToNext()) {
        ret = c.getString(0);     
    }
    return ret;
}

moveToFirst()方法的文献:

公共抽象布尔值moveToFirst()将光标移动到第一行。如果光标为空,此方法将返回false

返回移动是否成功

因此,moveToFirst调用失败(因为CURSOR有0个元素),这就是崩溃的原因

这样做:

if(c != null && c.moveToFirst()) {
    String id = c.getString(0);
    Log.v(id, id + "Id" );
    return id;
}

在这里使用一段时间是没有意义的<代码>id
将始终获取最后一个元素。更不用说
id
不能从循环外部访问。。。