Prezados, estou usando a seguinte rotina para checar uma matricula no sistema:
public String searchPass(String idMatricula)
{
bd = this.getReadableDatabase();
String query = "select matricula from "+TABLE_NAME;
Cursor cursor = bd.rawQuery(query , null);
String a, b;
b = "not found";
if(cursor.moveToFirst())
{
do{
a = cursor.getString(0);
Log.i("BD", "ok!");
if(a.equals(idMatricula))
{
b = cursor.getString(1);
Log.i("BD", "ok, leu!");
break;
}
}
while(cursor.moveToNext());
}
return b;
}
Essa rotina deve apenas me retornar se a matricula digitada existe no banco. Estou chamando ela da seguinte maneira:
String password = helper.searchPass(str);
Porém da erro e não ler nada e acaba fechando a aplicação.
O erro são esses:
12-29 12:25:11.124: I/BD(5640): ok!
12-29 12:25:11.124: E/CursorWindow(5640): Failed to read row 0, column 1 from a CursorWindow which has 6 rows, 1 columns.
12-29 12:25:11.125: D/AndroidRuntime(5640): Shutting down VM
12-29 12:25:11.125: W/dalvikvm(5640): threadid=1: thread exiting with uncaught exception (group=0x4167ad40)
12-29 12:25:11.134: E/AndroidRuntime(5640): FATAL EXCEPTION: main
12-29 12:25:11.134: E/AndroidRuntime(5640): Process: br.com.stamptwo, PID: 5640
12-29 12:25:11.134: E/AndroidRuntime(5640): java.lang.IllegalStateException: Could not execute method of the activity
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.view.View$1.onClick(View.java:3841)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.view.View.performClick(View.java:4456)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.view.View$PerformClick.run(View.java:18465)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.os.Handler.handleCallback(Handler.java:733)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.os.Handler.dispatchMessage(Handler.java:95)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.os.Looper.loop(Looper.java:136)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.app.ActivityThread.main(ActivityThread.java:5086)
12-29 12:25:11.134: E/AndroidRuntime(5640): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 12:25:11.134: E/AndroidRuntime(5640): at java.lang.reflect.Method.invoke(Method.java:515)
12-29 12:25:11.134: E/AndroidRuntime(5640): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
12-29 12:25:11.134: E/AndroidRuntime(5640): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
12-29 12:25:11.134: E/AndroidRuntime(5640): at dalvik.system.NativeStart.main(Native Method)
12-29 12:25:11.134: E/AndroidRuntime(5640): Caused by: java.lang.reflect.InvocationTargetException
12-29 12:25:11.134: E/AndroidRuntime(5640): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 12:25:11.134: E/AndroidRuntime(5640): at java.lang.reflect.Method.invoke(Method.java:515)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.view.View$1.onClick(View.java:3836)
12-29 12:25:11.134: E/AndroidRuntime(5640): ... 11 more
12-29 12:25:11.134: E/AndroidRuntime(5640): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.database.CursorWindow.nativeGetString(Native Method)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.database.CursorWindow.getString(CursorWindow.java:434)
12-29 12:25:11.134: E/AndroidRuntime(5640): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
12-29 12:25:11.134: E/AndroidRuntime(5640): at br.com.stamptwo.BDCore.searchPass(BDCore.java:55)
12-29 12:25:11.134: E/AndroidRuntime(5640): at br.com.stamptwo.PrincipalActivity.onButtonClick(PrincipalActivity.java:66)
12-29 12:25:11.134: E/AndroidRuntime(5640): ... 14 more
A linha de erro 66, é onde chamo o método para checar a senha.
Minha tabela é criada assim: //Criação tabela Contas bd.execSQL("Create TABLE contas (_id INTEGER PRIMARY KEY,"+ "nome TEXT, rg TEXT, cpf INT, matricula TEXT, titulo_eleitor INT, pis INT,"+ "grupo_horario TEXT, celular INT, email TEXT, ativo INT, dia INT, mes INT, ano INT);");
— Renato Souza 29 de dez de 2015Prezados, conseguir resolver o meu problema. Apenas coloquei b = cursor.getString(1); zero aqui no lugar do 1 e foi.
— Renato Souza 29 de dez de 2015