데이터베이스 내의 사람 이름을 검색하려고합니다. 현재 경계 오류가 발생하고 있습니다.안드로이드 커서가 범위를 벗어남 예외 인덱스 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;
}
+1,'if (c! = null)'은 커서가 _empty_인지 확인하지 않습니다. – Sam
@Sam 반환 된 String Sam에 'IF ELSE'체크를 추가했습니다. (편집 및 원래 질문에 표시). 행 수가 반환되었는지 (예 : Henrry가 명시한 것처럼) 수표를 추가하면 프로그램이 더 이상 충돌하지 않지만 수표가 없으면 충돌이 발생합니다. 또한 'IF'문은 'nameReturned'가 아무 것도 아닌 결과 즉, 결과가 있음을 나타내는 true를 반환합니다. 지금은 매우 혼란스러워! - – user1352057
@ user1352057 근본적인 문제는'KEY_ROWAPPID + "="+ passedID'가있는 행이 없다는 것입니다.'passedID'의 값을 두 번 확인하십시오. – Sam