2010-07-24 6 views
1

나는 여러 열이있는 목록보기가 있습니다. 이름, 날짜 등과 같은 것들. TextView 헤더를 클릭하고 해당 필드로 목록을 정렬 할 수 있기를 원합니다. 목록이 변수를로드하고 목록이 쿼리되고 _id 필드 (작동 외의 놀랄 일은 아님)로 정렬되면 TextView 헤더를 클릭하면 닫기가됩니다. ::Orderby를 전달

스레드 [< 3> 주 (정지됨 (예외 SQLiteException))
ViewRoot.handleMessage (메시지) 라인 : 1,757
ViewRoot (핸들러) .dispatchMessage (메시지) 라인 99 Looper.loop() 선 123 ActivityThread.main (String []) 행 : 4595
Method.invokeNative (Object, Object [], Class, int, boolean) 행 : 사용할 수 없음 [기본 메서드]
Method.invoke (Object, 오브젝트 ...) 라인 : 521
ZygoteInit $ MethodAndArgsCaller.run() 라인 : 860
ZygoteInit.main (문자열 []) 라인 : 618 NativeStart.main (문자열 []) 라인 : 사용할 수 없습니다 [기본 방법]

내 orderby 변수를 변경하지 않으면 TextView에서 오류가 발생하지 않습니다.

설정 VARIABLE :

private View.OnClickListener NameSortbtnListener = new View.OnClickListener(){

public void onClick(View v){ 

      sort = " KEY_JOURNAL_TITLE "; 
      fillData(); 
     } 

    }; 

채우는리스트 :

private void fillData() { Cursor notesCursor = mDbHelper.fetchAllJournals(sort); startManagingCursor(notesCursor);

 String[] from = new String[]{journalDbAdapter.KEY_JOURNAL_TITLE, 
       journalDbAdapter.KEY_LOCATION, journalDbAdapter.KEY_JDATE, 

       journalDbAdapter.KEY_STEPS}; 

     int[] to = new int[]{R.id.text1, R.id.text2, R.id.text3, R.id.text4}; 


     SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, 

from, to); setListAdapter(notes); }

,536 (DB 어댑터)

QUERY :

public Cursor fetchAllJournals(String sort) {

 return mDb.query(DATABASE_JOURNAL_TABLE, new String[] {KEY_JROWID, 
       KEY_JOURNAL_TITLE, KEY_JOURNAL_NOTES, KEY_JDATE, KEY_LOCATION, 
       KEY_STEPS},null , null, null, null, sort ,null); 
    } 

답변

0

주문 문자열을 추가하고 ... 에 결합했습니다. sort 값은 "name"이고 order 값은 "ASC"입니다. 둘 다 따옴표를 문자열에 저장합니다.

 
public Cursor fetchAllJournals(String sort, String order) { 

     return mDb.query(DATABASE_JOURNAL_TABLE, new String[] {KEY_JROWID, 
       KEY_JOURNAL_TITLE, KEY_JOURNAL_NOTES, KEY_JDATE, KEY_LOCATION, 
       KEY_STEPS},null , null, null, null, " " + sort + " " + order + " " ,null); 
    } 

0

즉석, 나는 문제가 무엇인지 모른다. 그러나 예외를 잡을 때 문제를 추적하는 데 도움이되는 SQLiteException 개체 내에 메시지를 인쇄 할 수 있어야합니다.

너머에는 다음과 같이 정의 된 상수가 있다고 가정합니다. String KEY_JROWID = "KEY_JROWID"; String KEY_JOURNAL_TITLE = "KEY_JOURNAL_TITLE";

onClick 이벤트에서 KEY_JOURNAL_TITLE 대신 "KEY_JOURNAL_TITLE"(으)로 정렬을 설정합니다. 열 이름이 변수 이름과 직접 일치하지 않으면 SQLite에서 열을 찾을 수 없음 예외가 throw 될 수 있습니다.

내가 볼 수있는 유일한 다른 문제는 정렬 열의 앞뒤 임의의 공간입니다. 아무 생각도, 왜 그걸 가지고 ... 그래서 그들의 이유가 될 수 있습니다. 그리고 나는 그것이 문제를 야기 할 것이라는 것을 정말로 의심합니다. 그러나 어둠 속에서 한 발 맞았습니다.

+0

데이터베이스 어댑터 있음 각 필드에는 상수가 있습니다. 나는 여전히 같은 간격으로 주위를 놀았다. 또한 : 내가 쿼리를 호출하기 전에 정렬 오류를 지적했다 지적하지 않을 수도 있습니다. private 문자열 sort = "null"; – Brian

+0

SQLiteException에 대한 메시지는 어떻게됩니까? sort = "KEY_JOURNAL_TITLE"을 sort = KEY_JOURNAL_TITLE로 바꾸면 어떻게 될까요? – aepryus

+0

지금은 테스트 할 수 없지만 따옴표없이 문자열을 설정할 수 있다고 생각하지 않습니다. – Brian