예전 자유 게시판

SuperPetTracker --소스코드좀 봐 주세요-버그가 있어요...류광 선생님께

킴칸스 2010-08-12 10:08


안녕하세요? 선생님이 번역하신 "안드로이드 프로그래밍"으로 공부중인 프로그래밍 초보자입니다.
내용중 삽입된 SuperPetTracker 소스를 분석하고 여기에 입력 TextEdit 항목을 한개 추가하고 관련 DB부분에도 모두 항목을 추가 하였습니다. 헌데 실력이 부족하여 fillPetList 부분에서 에러는 안나는데 실행시 정지해 버립니다. 뭔가 잘못한 부분이 있는가본데 찾지를 못하고 있어 이렇게 질문올립니다.
바쁘시겠지만 좀 봐 주셨으면 합니다. 소스전체를 보내드리고 싶은데 보낼 수가 없네요. 에러나는 부분만 올립니다.--  원소스에 Lunar 라는 입력 및 출력 부분을 1개항목 추가만 한 것입니다. 관련 DB도 그리했고요. 전체 소스가 필요하시면 보낼 수 있는 개인메일 부탁합니다. 부탁 드립니다.
제 연락처는 [email protected]   010-5012-0702 김권수 입니다.

        public void fillPetList() {
                // SQL Query
                SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
                queryBuilder.setTables(Pets.PETS_TABLE_NAME +", " +PetType.PETTYPE_TABLE_NAME + "," + Lunar.LUNAR_TABLE_NAME);
                queryBuilder.appendWhere(Pets.PETS_TABLE_NAME + "." + Pets.PET_TYPE_ID + "=" + PetType.PETTYPE_TABLE_NAME + "." + PetType._ID );
                queryBuilder.appendWhere(PetType.PETTYPE_TABLE_NAME + "." + PetType.LUNAR_ID + "=" + Lunar.LUNAR_TABLE_NAME + "." + Lunar._ID);

                // Get the database and run the query
        String asColumnsToReturn[] = {
                        Pets.PETS_TABLE_NAME + "." + Pets.PET_NAME, Pets.PETS_TABLE_NAME + "." + Pets._ID,
                        PetType.PETTYPE_TABLE_NAME + "." +PetType.PET_TYPE_NAME, Lunar.LUNAR_TABLE_NAME + "." + Lunar.LUNAR_NAME
                        };
        mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null, null, null, Pets.DEFAULT_SORT_ORDER);

        // Use an adapter to bind the data to a ListView, where each item is shown as a pet_item layout                
        startManagingCursor(mCursor);
        ListAdapter adapter =
            new SimpleCursorAdapter(this, R.layout.pet_item, mCursor,
                new String[] {Pets.PET_NAME, PetType.PET_TYPE_NAME, Lunar.LUNAR_NAME },
                new int[]     {R.id.TextView_PetName, R.id.TextView_PetType, R.id.TextView_Lunar });

        ListView av = (ListView)findViewById(R.id.petList);
        av.setAdapter(adapter);


류광 2010-08-12 18:08


독자분이 작성한 소스를 분석해서 오류를 찾는 것은 제가 할만한 일이 아닌 것 같습니다. 일반적인 조언만 드리자면...

우선 SuperPetTrackerDatabaseHelper.java 의 SQL 문 등도 다 제대로 수정하신 거겠죠? 혹시 빼먹은 것이 있을지 모르니 다시 점검해 보시고요.

또한 Log.d() 등을 이용해서 프로그램의 주요 지점에서 주요 변수들을 확인해 보는 것도 유용한 방법입니다.

아무리 봐도 원인을 찾기 힘들다면, 소스에만 매달리지 말고 한발 물러나서 안드로이드의 DB 처리 방식이나 GUI와 DB의 연동 방식 등 기본적인 부분을 세심하게 살펴 보시고요. (아 이 소스에서 요것만 살짝 바꾸면 되겠다... 하고 가볍게 시작했다가 생각보다 시간이 많이 걸리는 경우는 흔히 있습니다.)