2013-01-21 3 views
0

데이터베이스 내의 사람 이름을 검색하려고합니다. 현재 경계 오류가 발생하고 있습니다.안드로이드 커서가 범위를 벗어남 예외 인덱스 0

데이터베이스에있는 모든 데이터를 표시하는 목록보기가 있으므로 검색하려는 데이터가 존재한다는 것을 알고 있습니다.

ELSE 점검 경우 : 내가 잘못거야 어디

NameAppointPass.open(); 
    String nameReturned = NameAppointPass.getName(sentID); 
    if(nameReturned != "") 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("returned"); 
     TextView txt = new TextView(this); 
     txt.setText("win"); 
     d.setContentView(txt); 
     d.show(); 
    } 
    else 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("empty"); 
     TextView txt = new TextView(this); 
     txt.setText("Fail"); 
     d.setContentView(txt); 
     d.show(); 
    } 

희망이 사람을 볼 수 있습니다.

01-21 21:41:43.753: E/AndroidRuntime(276): FATAL EXCEPTION: main 
01-21 21:41:43.753: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.addAppointment}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

내가 같이 '긴 변수'는 온 클릭을 사용하여 내가 목록보기에서 원하는 데이터의 ID를 보낸다 :

public void onListItemClick(ListView list, View v, int list_posistion, long item_id) 
{ 

    long idToPass = item_id; 

    Intent setName = new Intent("com.example.flybase2.addAppointment"); 
    setName.putExtra("newPassedID", idToPass); 
    startActivity(setName); 
} 

현재 나는 다음과 같은 오류를 받고 있어요 이것은 번들을 통해 다음과 같이 객체 인스턴스 'NameAppointPass'로 전송됩니다.

NameAppointPass.open(); 
String nameReturned = NameAppointPass.getName(sentID); 

Th 코드를 다음 전자는 쿼리가 데이터베이스의 getName 방법을 보여주고 선택한 ID에 저장된 이름을 반환해야하지만 대신에 나는 오류 얻을 : 커서가 비어있을 경우 커서가 더있는 경우

public String getName(long passedID) { 

     String [] columns = new String[]{KEY_ROWAPPID, KEY_NAMEAPP, KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP}; 
     Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, KEY_ROWAPPID + "=" + passedID, null, null, null, null); 
     if(c != null) 
     { 
     c.moveToFirst(); 
     String name = c.getString(1); 
     return name; 
     } 

     return null; 
    } 

답변

2

, 당신은 확인할 수를 데이터 :

 if(c != null && c.getCount() > 0) 

커서가 비어있는 이유를 자세히 진단하려면 로그 문을 여러 위치에두고 항목 ID가 올바른지 확인하십시오.

+0

+1,'if (c! = null)'은 커서가 _empty_인지 확인하지 않습니다. – Sam

+0

@Sam 반환 된 String Sam에 'IF ELSE'체크를 추가했습니다. (편집 및 원래 질문에 표시). 행 수가 반환되었는지 (예 : Henrry가 명시한 것처럼) 수표를 추가하면 프로그램이 더 이상 충돌하지 않지만 수표가 없으면 충돌이 발생합니다. 또한 'IF'문은 'nameReturned'가 아무 것도 아닌 결과 즉, 결과가 있음을 나타내는 true를 반환합니다. 지금은 매우 혼란스러워! - – user1352057

+0

@ user1352057 근본적인 문제는'KEY_ROWAPPID + "="+ passedID'가있는 행이 없다는 것입니다.'passedID'의 값을 두 번 확인하십시오. – Sam

0

관리되는이 정렬. 결국 나는 잘못 전달 된 ID 보유 변수 내 이름을 잘못했다.

관련 문제