특정 오류 : 나는 많은 기사가있는 것을 알고 : 데이터/데이터/패키지/데이터베이스데이터베이스 오류
주에 액세스하려고 할 때 SQLite는 데이터베이스와 안드로이드 응용 프로그램이 실패 Stackoverflow뿐만 아니라 Assets 폴더의 sqlite 파일을 data/data/package/databases 폴더에 복사하는 방법과 관련된 많은 권장 사이트가 게시되었습니다. 그러나 필자의 구현은 실제 장치가 아닌 에뮬레이터에서만 작동합니다. 나는 퍼즐 조각을 놓치고 있다고 생각한다.
내 질문 누구든지 내 코드에서 오류 지점을 식별 할 수 있습니까? 나는 이것이 참으로 새로운 쌍의 눈이 빨리 오류를 발견 할 수있는 문제 중 하나라고 생각합니다. 11-02 20 : 22 : 17.045 : INFO/프로세스 (15318) : 신호를 보내는 중 ... 당신이 제공 할 수있는 통찰력 사전에
오류 로그 (BOLD 항목은 장애 지점됩니다) 감사합니다. PID : 15318 SIG : 9 11-02 20 : 22 : 17.055 : INFO/ActivityManager (2697) : 프로세스 com.game.myapp (pid 15318)가 종료되었습니다. 11-02 20 : 22 : 17.055 : INFO/창 관리자 (2697)을 WIN DEATH : 창 {40922a70 com.game.myapp은 /는 com.game.myapp.MainActivity = TRUE 일시}
내 코드
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "ttg.db";
public static String DATABASE_PATH = "/data/data/com.game.myapp/databases/";
private SQLiteDatabase ttgDatabase;
private Context myContext = null;
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing
}else{
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
try{
String myPath = DATABASE_PATH + DATABASE_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}catch(SQLiteException e){
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException{
File fileTest = myContext.getFileStreamPath(DATABASE_NAME);
boolean exists = fileTest.exists();
if (!exists) {
OutputStream databaseOutputStream = new FileOutputStream(DATABASE_PATH + DATABASE_NAME);
InputStream databaseInputStream;
databaseInputStream = myContext.getAssets().open(DATABASE_NAME);
byte[] buffer = new byte[1024];
int length;
while ((length = databaseInputStream.read(buffer)) > 0) {
databaseOutputStream.write(buffer);
}
// Close the streams
databaseInputStream.close();
databaseOutputStream.flush();
databaseOutputStream.close();
}
}
public void openDataBase() throws SQLException{
//Open the database
String myPath = DATABASE_PATH + DATABASE_NAME;
ttgDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(ttgDatabase != null)
ttgDatabase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
이런 쓰레기를 당신의 들여 쓰기가 어떻게 되었습니까? 나는 무엇이 어디 있는지 말할 수 없다 .. – Izkata
Welcome to Stackoverflow! 답변이 도움이된다면 투표하십시오. 응답으로 질문에 성공적으로 답변 한 경우 옆에있는 녹색 확인 표시를 클릭하여 대답을 수락하십시오. 또한 좋은 질문을 작성하는 방법에 대한 조언은 http://stackoverflow.com/questions/how-to-ask를 참조하십시오. –
흠, 게시 한 로그는 앱이 사망했음을 나타 냈지만 원인은 밝히지 않았습니다. 아마도 더 긴 버전의 로그를 게시 할 수 있습니까? SQLHelper를 사용할 때 경로 (/data/data/com.game.myapp/databases)를 사용할 필요가 없습니다 java.lang.NullPointerException이 – kikoboar