안드로이드 SQLite 연동하는데, Run 과정에서 실행이 되지 않습니다.

조회수 2407회

---------- 오류 로그 부분입니다. 원인으로 추정되는 부분만 복붙 했습니다 ---------

FATAL EXCEPTION: main Process: com.example.karry.autocompleted, PID: 1707 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.karry.autocompleted/com.example.karry.autocompleted.SQLiteAssistant}: java.lang.InstantiationException: java.lang.Class has no zero argument constructor

Caused by: java.lang.InstantiationException: java.lang.Class has no zero argument constructor at java.lang.Class.newInstance(Native Method)

--------------- 아래는 오류가 나는 클래스에 대한 소스코드 부분 입니다 ---------------

public class SQLiteAssistant extends SQLiteOpenHelper
{

private static final String DB_NAME = "usingsqlite.db";
private static final int DB_VERSION_NUMBER = 1;
private static final String DB_TABLE_NAME = "Datas";
private static final String DB_COLUMN_1_NAME = "Data Name";

private static final String DB_CREATE_SCRIPT = "create table " + DB_TABLE_NAME;

private SQLiteDatabase sqliteDBInstance = null;


 public SQLiteAssistant(Context context)
{
    super(context, DB_NAME, null, DB_VERSION_NUMBER);
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{

}

public void onCreate(SQLiteDatabase sqliteDBInstance)
{
//      Log.i("onCreate", "Creating the database...");
    sqliteDBInstance.execSQL(DB_CREATE_SCRIPT);
}

public void openDB() throws SQLException
{
//      Log.i("openDB", "Checking sqliteDBInstance...");
    if(this.sqliteDBInstance == null)
    {
        Log.i("openDB", "Creating sqliteDBInstacne...");
        this.sqliteDBInstance = this.getWritableDatabase();
    }
}

public void closeDB()
{
    if(this.sqliteDBInstance != null)
    {
        if(this.sqliteDBInstance.isOpen())
            this.sqliteDBInstance.close();
    }
}

public long insertData(String DataName)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(DB_COLUMN_1_NAME, DataName);
    Log.i(this.toString() + " - insertData", "Inserting : " + DataName);
    return this.sqliteDBInstance.insert(DB_TABLE_NAME, null, contentValues);
}

public boolean removeCountry(String DataName)
{
    int result = this.sqliteDBInstance.delete(DB_TABLE_NAME, "Data Name = " + DataName + "'", null);

    if(result > 0)
        return true;
    else
        return false;
}

public long updateData(String oldDataName, String newDataName)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(DB_COLUMN_1_NAME, newDataName);
    return this.sqliteDBInstance.update(DB_TABLE_NAME, contentValues, "Data Name = " + oldDataName + "", null);
}

public String[] getAlldata()
{
    Cursor cursor = this.sqliteDBInstance.query(DB_TABLE_NAME, new String[]
            {
                    DB_COLUMN_1_NAME
            },
            null,null,null,null,null);

    if(cursor.getCount() > 0)
    {
        String[] str = new String[cursor.getCount()];
        int i = 0;

        while(cursor.moveToNext())
        {
            str[i] = cursor.getString(cursor.getColumnIndex(DB_COLUMN_1_NAME));
            i++;
        }
        return str;
    }
    else
    {
        return new String[]
                {

                };
    }
}

}

대체 뭐가 원인일까요? 오류를 제 실력으로 읽어본다면 파라미터가 없는 ctor이 없어서 나타나는 것 같은데, 이런 ctor을 만들어줘도 동일한 오류가 발생합니다.ㅠㅠ

안드로이드 연결해서 Run시에 돌아가는 듯 하다가 안드로이드에서는 뭔가 켜지는 듯 하면서 꺼지는 증상이고, 메시지로는 'app_name' 앱을 중지하였습니다. 라고 뜹니다. 안드로이드 스튜디오 내 로그에서는 위에 첨부해드린 오류가 출력이 되구요.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    올려주신 SQLiteAssistant 코드는 문제가 없어보입니다. AndroidManifest.xml에 실행 액티비티를 제대로 설정했는지 확인해보세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사드립니다! 마침 매니페스트를 방금 확인하고 수정했습니다 ㅠㅠ 실행 액티비티가 잘못 설정되어있는걸 확인하고 수정했습니다. 근데 또 다른 문제가 생겼습니다. Hongki Lee 2017.4.9 19:22
    • Caused by: android.database.sqlite.SQLiteException: no such table: countries (code 1): , while compiling: SELECT country_name FROM countries Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: countries (code 1): , while compiling: SELECT country_name FROM countries) 오류가 이 오류로 바껴서 뜨네요. db에 데이터 insert 할 때 생기는 것 같은데요. 검색 해보니까 DB생성이 정상적으로 안됐다는 것 같은데 맞나요?DB 생성이 안된 상태에서 삽입하려니까 못하겠다는건가요? Hongki Lee 2017.4.9 19:24

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)