마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SQLite 이런 에러가 발생했습니다!! ;;

0 추천

 

public class DBHandler extends SQLiteOpenHelper {


    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "chatRoom.db";

    private static final String CHAT = "chat";

    private static final String CHAT_LIST = "chat_list";
    private static final String CHAT_ROOM = "chat_room";
    private static final String CHAT_NAME = "chat_name";
    private static final String CHAT_TEXT = "chat_text";

    private static final String ROOM = "room";

    public ArrayList<String> arrayList;

    private String room_name;

 

    public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        String CREATE_CHAT_TABLE =

                "CREATE TABLE " +

                 CHAT + "(" +

                        CHAT_LIST + " INTEGER PRIMARY KEY, " +

                        CHAT_ROOM + " TEXT," +

                        CHAT_NAME + " TEXT," +

                        CHAT_TEXT + " TEXT" + ")";

        db.execSQL(CREATE_CHAT_TABLE);

        String CHAT_ROOM_TABLE =

                "CREATE TABLE " +

                        ROOM + "(" +

                        CHAT_LIST + " INTEGER PRIMARY KEY, " +

                        CHAT_ROOM + " TEXT" + ")";

        db.execSQL(CHAT_ROOM_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        db.execSQL("DROP TABLE IF EXISTS" + CHAT);
        onCreate(db);
    }

 

    public ArrayList<String> findChatData(String room_name)
    {
        String query = "SELECT * FROM " + CHAT + " WHERE " + CHAT_ROOM + " = '"+ room_name +"'";

        //String query = "SELECT * FROM " + CHAT;

        Log.i("findChatData", room_name);

        ArrayList<String> arrayList = new ArrayList<>();

        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();

        Cursor cursor = sqLiteDatabase.rawQuery(query, null);

        if(cursor.moveToFirst())
        {
            cursor.moveToFirst();

            int count = cursor.getCount();

            Log.i("count", String.valueOf(count));

            for(int i = 0; i < count; i++)
            {
                Log.i("cursor", "Start");

                String text = cursor.getString(cursor.getColumnIndex("text")); // <- 에러발생 지점.

                arrayList.add(text);

                //Log.i("text", text);

                cursor.moveToNext();

                // chat_room = new Chat_room(name, text);
            }

            cursor.close();
        }
        else
        {
            Log.i("chat", "Error");
        }

        sqLiteDatabase.close();

        return arrayList;
    }

    public void addRoomData(Chat_room chat_room)
    {
        ContentValues contentValues = new ContentValues();

        contentValues.put(CHAT_ROOM, chat_room.getRoomName());

        Log.i("getRoomName", chat_room.getRoomName());

        SQLiteDatabase sqLiteDatabase =this.getWritableDatabase();

        sqLiteDatabase.insert(ROOM, null, contentValues);
        sqLiteDatabase.close();
    }


    public void addChatData(Chat_room chat_room)
    {
        ContentValues contentValues = new ContentValues();

        contentValues.put(CHAT_ROOM, chat_room.getRoomName());
        contentValues.put(CHAT_NAME, chat_room.getName());
        contentValues.put(CHAT_TEXT, chat_room.getMsg());

        Log.i("getRoomName", chat_room.getRoomName());
        Log.i("getName", chat_room.getName());
        Log.i("getMsg", chat_room.getMsg());

        SQLiteDatabase sqLiteDatabase =this.getWritableDatabase();

        sqLiteDatabase.insert(CHAT, null, contentValues);
        sqLiteDatabase.close();
    }

E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 4 columns.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jt.android/com.example.jt.android.ChatRoomActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

 

이러한 에러가 발생했는데 왜그런건지;; 답변 부탁드립니다

알파고 (4,320 포인트) 님이 2017년 12월 3일 질문

1개의 답변

+1 추천
 
채택된 답변

의도를 정확히 모르겠으나, 잠깐 살펴본 결과로는

 private static final String CHAT_TEXT = "chat_text"; 의 컬럼 익덱스를 구하시려고 하신듯 한데,

cursor.getColumnIndex("text") 로 구하시다보니, 컬럼 인덱스가 -1이 반환되었고, 

없는 인덱스에 대해 cursor.getString 을 호출해서 IllegalStateException 발생한듯 합니다.

cursor.getColumnIndex(CHAT_TEXT)  로 바꿔 보세요.

 

익명사용자 님이 2017년 12월 4일 답변
알파고님이 2017년 12월 5일 채택됨
...