2017-04-21 15 views
0

나는 동물의 ID를 받고 해당 ID를 do-while에서 여러 번 읽을 수있는 데이터베이스의 메서드에 전달하는 응용 프로그램을 가지고 있습니다. 이 오류가 발생하는 이유를 알고 싶습니다.커서를 사용하는 방법?

이 내 코드입니다 :

bd = new BaseDados(getApplicationContext()); 
     Cursor cc = bd.getIdAnimal(chipnumber); 
     if (cc.moveToFirst()) { 

     idanimal = cc.getInt(cc.getColumnIndex("idanimal")); 
    } 

    Cursor ccc = bd.getGruupsnosAnimals(idanimal); 

    do{ 

     if(ccc.moveToFirst()){ 

      String groupname= ccc.getString(ccc.getColumnIndex("groupname")); 
     } 


    }while (ccc.moveToNext()); 

이 내 오류입니다 :

Process: com.example.nobre.myapplication, PID: 4529 
                        android.database.sqlite.SQLiteException: not an error (code 0) 
                         at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method) 
                         at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:845) 
                         at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836) 
                         at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62) 
                         at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144) 
                         at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133) 
                         at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197) 
                         at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237) 
                         at com.example.nobre.myapplication.Activities.VerAnimaisActivity.showDialog(VerAnimaisActivity.java:193) 
                         at com.example.nobre.myapplication.Activities.VerAnimaisActivity$2.onClick(VerAnimaisActivity.java:153) 
                         at android.view.View.performClick(View.java:4780) 
                         at android.view.View$PerformClick.run(View.java:19866) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:135) 
                         at android.app.ActivityThread.main(ActivityThread.java:5254) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:372) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

답변

1

예외 : 없습니다 오류? 그것은 새로운 것입니다.

하단 루프가 약간 이상하며 버그 일 수 있습니다. 다음으로 이동하지만 실패해도 첫 번째로 이동하지 않았을 수 있습니다. 성공하면 무한 루프가됩니다. 대신이 시도 :

if(ccc.moveToFirst()){ 

    do{ 

     String groupname= ccc.getString(ccc.getColumnIndex("groupname")); 
    }while (ccc.moveToNext()); 


} 
1
do{ 

    if(ccc.moveToFirst()){ 

     String groupname= ccc.getString(ccc.getColumnIndex("groupname")); 
    } 


}while (ccc.moveToNext()); 

이 무한 루프, 당신은 커서에서 다음 항목을 가지고있는 동안, 당신은 첫 번째로 이동 한 다음 반복 다시 처음으로 이동합니다.

사용 후 Cursor.close() 번으로 전화하는 것을 잊지 마십시오.

-1

이 시도 대신의

// Move the cursor to the first row if cursor is not empty 
if(ccc.moveToFirst()) { 

    do{ 
      String groupname= ccc.getString(ccc.getColumnIndex("groupname")); 
    }while (ccc.moveToNext()); // Move cursor to next row until it pass last entry 
} 

을 :

do{ 
     if(ccc.moveToFirst()) { 
      String groupname= ccc.getString(ccc.getColumnIndex("groupname")); 
     } 
}while (ccc.moveToNext()); 
+0

내가 다운 투표의 이유를 알 수 있습니까? – FAT