2012-12-03 3 views
1

Android (api 15)를 사용하여 android : minSdkVersion이 "8"인 Android 응용 프로그램을 만들었습니다. 이 응용 프로그램을 실행하려면 4.1 에뮬레이터를 사용하고 있습니다. 에뮬레이터에서 정상적으로 작동하며 api 4.1이 설치된 장치에 성공적으로 설치되지만 ... datak 클래스 (데이터베이스 연결 파일)를 사용하는 활동이 시작되면 응용 프로그램이 작동을 멈 춥니 다.응용 프로그램 데이터베이스 관련 활동이 에뮬레이터에서 작동하지만 장치에서 작동하지 않습니다.

앱은 4 가지 질문 중 하나와 가능한 답변이있는 퀴즈입니다. 데이터베이스 이름은 "KBC"이며 게임을 진행할 때 검색되지만 장치에서는 데이터베이스가 검색되지 않습니다. 나는 장치가 내 테이블 파일과 에뮬레이터에서 밀어 넣은 모든 질문이있는 데이터베이스 파일 "KBC"를 찾을 수 없다고 생각합니다 ...

가상 장치 파일 탐색기에서 "data/data/android.kt.banoge.karodpati/databases "

datak 클래스의 코드는 다음과 같습니다. 이미 많은 질문을 살펴 보았다 그러나 그들은하지 도움이됩니다 :

아무도 나에게이 문제에 대한 이유 또는 솔루션을 제공시겠습니까?

public class Datak 
{ 
public static final String QUE = "question"; 
public static final String A = "optionA"; 
public static final String B = "optionB"; 
public static final String C = "optionC"; 
public static final String D = "optionD"; 
public static final String ANS = "answer"; 
public static final String LEV = "level"; 

private static final String TAG = "DBAdapter"; 

public static final String played = "played"; 
public static final String five = "five"; 
public static final String one = "one"; 
public static final String second = "second"; 
public static final String first = "first"; 


private static final String DATABASE_NAME = "KBC"; 
private static final String DATABASE_TABLE = "main"; 
private static final String DATABASE_TABLE2 = "main2"; 
private static final String DATABASE_TABLE3 = "main3"; 
private static final int DATABASE_VERSION = 1; 

private static final String DATABASE_CREATE = 
    "create table "+ DATABASE_TABLE +"(" 
    + QUE + " text not null," 
    + A + " text not null, " 
    + B + " text not null," 
    + C + " text not null," 
    + D + " text not null," 
    + ANS + " text not null," 
    + LEV + " text not null); "; 

private final Context context; 

private DatabaseHelper DBHelper; 

private SQLiteDatabase db; 

public Datak(Context ctx) 
{ 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper 
{ 
    DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     db.execSQL(DATABASE_CREATE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
    int newVersion) 
    { 
     Log.w(TAG, "Upgrading database from version " + oldVersion 
       + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS titles"); 
     onCreate(db); 
    } 
}  

public Datak open() throws SQLException 
{ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 


public void close() 
{ 
    DBHelper.close(); 
} 

public Cursor getValue() 
{ 
    return db.query(DATABASE_TABLE, new String[] { 
      QUE, 
      A, 
      B, 
      C, 
      D, 
      ANS,LEV 
      }, 
      null, 
      null, 
      null, 
      null, 
      null,null 
      ); 


} 
public Cursor getValue2() 
{ 
    return db.query(DATABASE_TABLE2, new String[] { 
      QUE, 
      A, 
      B, 
      C, 
      D, 
      ANS,LEV 
      }, 
      null, 
      null, 
      null, 
      null, 
      null,null 
      ); 


} 
public Cursor getValue3() 
{ 
    return db.query(DATABASE_TABLE3, new String[] { 
      QUE, 
      A, 
      B, 
      C, 
      D, 
      ANS,LEV 
      }, 
      null, 
      null, 
      null, 
      null, 
      null,null 
      ); 


} 
public Cursor getState() 
{ 
    return db.query("states", new String[] { 
       played, 
       five, 
       one, 
       second, 
       first 
       }, 
       null,null,null,null,null); 


} 

public void updateRow(int a) 
{ 
    final Cursor c1; 
    int pl; 
ContentValues CV=new ContentValues(); 
c1=db.query("states", new String[] { 
     played, 
     five, 
     one, 
     second, 
     first 
     }, 
     null,null,null,null,null); 
    c1.moveToPosition(0); 

    if(a==1) 
    { 
     pl=c1.getInt(0); 
     pl++; 
     CV.put(played, pl); 
    } 
    if(a==2) 
    { 
     pl=c1.getInt(1); 
     pl++; 
     CV.put(five, pl); 
    } 
    if(a==3) 
    { 
     pl=c1.getInt(2); 
     pl++; 
     CV.put(one, pl);  
    } 
    if(a==4) 
    { 
     pl=c1.getInt(3); 
     pl++; 
     CV.put(second, pl); 
    } 
    if(a==5) 
    { 
     pl=c1.getInt(4); 
     pl++; 
     CV.put(first, pl); 
    } 

    db.update("states", CV, null, null); 
    c1.close(); 

} 

12-05 19 : 08 : 57.158 : E/AndroidRuntime (13,825) FATAL EXCEPTION : 메인 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13,825) 인 java.lang .IllegalStateException : 활동의 메서드를 실행할 수 없습니다. 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.view.View $ 1.onClick (View.java:3069) 12-05 19:08 : 57.158 : E/AndroidRuntime (13825) : android.view.View.performClick (View.java:3591) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.view.View $ PerformClick .run (View.java:14263) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.os.Han dler.handleCallback (Handler.java:605) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.os.Handler.dispatchMessage (Handler.java:92) 12-05 19:08 : 57.158 : E/AndroidRuntime (13825) : android.os.Looper.loop (Looper.java:137) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.app.ActivityThread.main ActivityThread.java:4507) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : java.lang.reflect.Method.invokeNative (기본 메소드) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : java.lang.reflect.Method.invoke (Method.java:511) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run (ZygoteInit.java:790) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:557) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : dalvik.system.NativeStart.main (기본 메소드) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : 원인 : java .lang.reflect.InvocationTargetException 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : java.lang.reflect.Method.invokeNative (기본 메소드) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : java.lang.reflect.Method.invoke (Method.java:511) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.view.View $ 1.onClick (보기. 자바 : 3064) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : ... 11 더 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : 원인 : android.database. sqlite.SQLiteException : 해당 테이블 : 상태 :, 컴파일하는 동안 : 선택 재생, 다섯, 1, 두 번째, 처음 FROM 상태 12-05 19 : 08 : 57.158 : E androidRuntime (13825) : android.database.sqlite.SQLiteCompiledSql. native_compile (네이티브 메서드) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:68) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteProgram.compileAndbindAllArgs SQLiteProgram.java : 361) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:127) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteProgram. (SQLitePr ogram.java:94) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:53) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1690) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1575) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1531) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : android.database.sqlite.SQLiteDatabase .query (SQLiteDatabase.java:1611) 12-05 19 : 08 : 57.15 8 : E/AndroidRuntime (13825) : com.kt.banoge.karodpati.Datak.updateRow (Datak.java:172) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : at com.kt. banoge.karodpati.MainActivity.change (MainActivity.java:66) 12-05 19 : 08 : 57.158 : E/AndroidRuntime (13825) : ... 14 개 }

답변

0

당신이 db.execSQL을 대체 할 수있다 (" DROP TABLE IF 존재 제목 "); db.execSQL의 ("DROP TABLE IF EXISTS"+ DATABASE_TABLE);

이 도움이 될;)

서지

+0

내가이 솔루션의 응용 프로그램을 시도했다가 에뮬레이터 잘 작동하지만 여전히 장치에서 작동하지 ... 통해 UR 솔루션 db.execsql involkes onli 내가 데이터베이스를 업그레이드하는 경우 .. 데이터베이스를 열 수 없습니다! –

+0

네, 한번보세요 : "main"테이블을 생성하는 동안 "title"테이블을 삭제하려고합니다 : 부작용은 메인 테이블의 구조가 최신이 아닌 것일 수 있습니다. –

+0

"응용 프로그램이 작동을 멈췄습니다"라고 쓰면 logcat을 통해 예외가 발생합니까? 장치에서 응용 프로그램을 디버깅하면 어떻게됩니까? –

관련 문제