【发布时间】:2015-05-26 16:32:32
【问题描述】:
我收到一条错误消息:"SQLiteCantOpenDatabaseException: unable to open database file (code 14)" on the line: if (cursor != null && cursor.moveToFirst()) {
然后
data = dbHelper.getTblQuoteNotify("tblQuoteNotify", nCounter);
我有<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,这似乎是我研究中解决此问题的最常见解决方案 - 其他人可以看看下面的代码,让我知道在这种情况下我可能做错了什么吗?
来源:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
doTimerTask();
setContentView(R.layout.activity_main);
data_textview = (TextView) findViewById(R.id.data);
timer = (TextView)findViewById(R.id.timer);
dbHelper = new DBHelper(this);
try {
dbHelper.CopyDataBaseFromAsset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbHelper.openDataBase();
data = new Data();
}
public void doTimerTask(){
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
nCounter++;
// update TextView
timer.setText("Notify: " + nCounter);
data = dbHelper.getTblQuoteNotify("tblQuoteNotify", nCounter);
if (data != null) {
data_textview.setText(data.tblQuoteNotify);
}
Logcat:
05-26 12:01:28.533: E/AndroidRuntime(13445): FATAL EXCEPTION: main
05-26 12:01:28.533: E/AndroidRuntime(13445): Process: com.example.app, PID: 13445
05-26 12:01:28.533: E/AndroidRuntime(13445): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:845)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)
05-26 12:01:28.533: E/AndroidRuntime(13445): at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
05-26 12:01:28.533: E/AndroidRuntime(13445): at com.example.app.data.DBHelper.getTblQuoteNotify(DBHelper.java:67)
05-26 12:01:28.533: E/AndroidRuntime(13445): at com.example.app.MainActivity$1$1.run(MainActivity.java:69)
【问题讨论】:
-
打开数据库的代码是什么?你有权限,但可能你的路径不正确,你必须有类似的东西: private static String DBPATH = "/data/data/com.mypackage.myapp";所以发布你的代码。
-
请贴出与问题相关的所有代码。
-
道歉:完整的来源可以在这里找到:pastebin.com/R830dT9wpastebin.com/y8VjYzmY
标签: android sqlite android-sqlite fatal-error forceclose