具体错误:试图访问数据/数据/包/数据库数据库错误
注意当SQLite数据库Android应用程式失败:据我所知,很多文章都已发布在Stackoverflow以及一些推荐的网站上,关于如何将资产文件夹中的sqlite文件复制到数据/数据/包/数据库文件夹中。但是,我的实现只适用于仿真器而不是真正的设备。我想我错过了一块拼图。
我的问题 任何人都可以找出我的代码故障点?我真的认为这是一个新的眼睛很快就会发现错误的问题之一。预先感谢您为任何见解可以提供...
错误日志(BOLD项是故障点): 11-02 20:22:17.045:INFO /过程(15318):发送信号。 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死亡:窗口{40922a70 com.game.myapp/com.game.myapp.MainActivity暂停=真}
我的代码
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
欢迎来到Stackoverflow!如果您发现回复有帮助,请投票。如果回复成功回答您的问题,请点击旁边的绿色复选标记以接受答案。另请看看http://stackoverflow.com/questions/how-to-ask关于如何写一个好问题的建议 –
嗯,你发布的日志只显示你的应用程序已经死亡,而不是它的原因。也许你可以发布更长版本的日志? AndroidRuntimeè所致: 沿东西线显示java.lang.NullPointerException – kikoboar