SQLite rawquery返回游标空对象
这是我的密码。游标对象为空,为什么?有什么建议吗?我觉得rawquery不太好用。。。但RuntimeException在这一行中:SQLite rawquery返回游标空对象,sqlite,cursor,Sqlite,Cursor,这是我的密码。游标对象为空,为什么?有什么建议吗?我觉得rawquery不太好用。。。但RuntimeException在这一行中: defHelper = new DefinitionSQLiteHelper(context, "Definitions", null, 1); db = defHelper.getReadableDatabase(); if (db != null) { //Empezamos a leer de la BD args = new String[]{s+
defHelper = new DefinitionSQLiteHelper(context, "Definitions", null, 1);
db = defHelper.getReadableDatabase();
if (db != null) { //Empezamos a leer de la BD
args = new String[]{s+"%"};
String[]campos=new String[]{"name","meaning"};
String str = "SELECT * FROM Definitions";
//SELECT name,meaning FROM Definitions WHERE name LIKE 'p%' ORDER BY name
//Hago la búsqueda y lo guardo en un objeto Cursor
c = db.rawQuery(str,null);
//c.moveToNext();
//Nos aseguramos de que exista al menos un registro en cursor
if (c.moveToFirst()) {
//Recorremos el cursor hasta que no haya más registros
//Guardar en array de letra
do {
//Aquí es donde guardo lo obtenido de la consulta en un array
def.setPalabra(c.getString(c.getColumnIndex("name")));
def.setSignificado(c.getString(c.getColumnIndex("name")));
letraPrimera.add(def);
} while (c.moveToNext());
}
}
我的表只有两列,第一列是名称,第二列是含义。两列是字符串。例外情况:
def.setPalabra(c.getString(c.getColumnIndex("name")));
12-07 22:42:07.295 2130-2130/com.example.juan.midccionario E/MessageQueue JNI:java.lang.IndexOutOfBoundsException:索引0无效,大小为0
位于java.util.ArrayList.ThrowindexOutfBoundsException(ArrayList.java:255)
获取(ArrayList.java:308)
在com.example.juan.midccionario.Letter.obtanfirstpage(Letter.java:100)上
在com.example.juan.midccionario.Page上(Page.java:23)
在com.example.juan.midccionario.Search.onQueryTextSubmit(Search.java:127)上
位于android.support.v7.widget.SearchView.onSubmitQuery(SearchView.java:1156)
位于android.support.v7.widget.SearchView.access$900(SearchView.java:101)
位于android.support.v7.widget.SearchView$9.onEditorAction(SearchView.java:1134)
位于android.widget.TextView.doKeyDown(TextView.java:6030)
位于android.widget.TextView.onKeyDown(TextView.java:5911)
位于android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:720)
位于android.view.KeyEvent.dispatch(KeyEvent.java:2640)
在android.view.view.dispatchKeyEvent(view.java:9234)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)上
在com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395)上
位于com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727)
位于android.app.Activity.dispatchKeyEvent(Activity.java:2725)
位于android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
位于android.support.v7.app.AppCompateDelegateImplbase$AppCompateWindowCallBackbase.dispatchKeyEvent(AppCompateDelegateImplbase.java:224)
位于android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
在com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310)上
在android.view.ViewRootImpl$viewPostimeiInputStage.processKeyEvent(ViewRootImpl.java:4127)中
位于android.view.ViewRootImpl$viewPostimeiInputStage.onProcess(ViewRootImpl.java:4089)
在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:3642)
12-07 22:42:07.295 2130-2130/com.example.juan.midiccionario E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.example.juan.midiccionario.Letter.obtaninFirstPage(Letter.java:100)
at com.example.juan.midiccionario.Page.<init>(Page.java:23)
at com.example.juan.midiccionario.Search.onQueryTextSubmit(Search.java:127)
at android.support.v7.widget.SearchView.onSubmitQuery(SearchView.java:1156)
at android.support.v7.widget.SearchView.access$900(SearchView.java:101)
at android.support.v7.widget.SearchView$9.onEditorAction(SearchView.java:1134)
at android.widget.TextView.doKeyDown(TextView.java:6030)
at android.widget.TextView.onKeyDown(TextView.java:5911)
at android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:720)
at android.view.KeyEvent.dispatch(KeyEvent.java:2640)
at android.view.View.dispatchKeyEvent(View.java:9234)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727)
at android.app.Activity.dispatchKeyEvent(Activity.java:2725)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3820)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3981)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2253)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1874)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(Input
//Conectar con la base de datos
defHelper = new DefinitionSQLiteHelper(context, "Definitions", null, 1);
db = defHelper.getReadableDatabase();
if (db != null) //Empezamos a leer de la BD
{
//String con la consulta que vamos a hacer, con LIKE que va a indicar que empiece por la letra que acabamos de pasar
String str = "SELECT name,meaning FROM Definitions WHERE name LIKE '"+s+"%' ORDER BY name";
//Hago la búsqueda y lo guardo en un objeto Cursor
c = db.rawQuery(str,null);
//Nos aseguramos de que exista al menos un registro en cursor
if (c.moveToFirst()) {
//Recorremos el cursor hasta que no haya más registros
//Guardar en array de letra
do{
def = new Definition("","");//Creamos una definición vacía
def.setPalabra(c.getString(c.getColumnIndex("name")));
def.setSignificado(c.getString(c.getColumnIndex("meaning")));
letraPrimera.add(def);
}while(c.moveToNext());
}
c.close();//Cerramos el cursor
miIndice = 0;//apunto a la primera posición de letraPrimera