我的應用程序運行良好鎖定,直到我碰到這個錯誤的SQLite絆:Android的SQLite的嘗試解鎖讀取鎖,而不是由當前線程
java.lang.IllegalMoniterStateException: attempt to unlock read lock, not locked by current thread
我試過在計算器上的所有其他的答案,但他們似乎沒有幫助。他們都說我有多個線程創建我的SQLiteDBAdpdter的實例,但我只有Activity,但它的SherlockFragmentActivity。每個類都創建一個新的SQliteDBAdapter實例,所以我不確定這是否是我得到這個錯誤的原因。
我一直堅持這個好幾個小時,而且GREATLY感謝任何幫助。
片段1:
public final class NotesFragment extends SherlockListFragment {
NotesDbAdapter db;
private static final int ACTIVITY_EDIT = 1;
private static final int DELETE_ID = Menu.FIRST + 1;
public static NotesFragment newInstance(String content) {
NotesFragment fragment = new NotesFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db = new NotesDbAdapter(getActivity());
db.open();
if (db.fetchAllNotes().getCount() == 0) {
doWelcomeMessage();
}
db.close();
}
private void doWelcomeMessage() {
// Show welcome dialog
startActivity(new Intent(getActivity(), NotesWelcome.class));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
db = new NotesDbAdapter(getActivity());
db.open();
if (db.fetchAllNotes().getCount() == 0) {
doWelcomeMessage();
}
db.close();
return ll;
}
}
錯誤指向db.open();
在onCreate()
方法。該open()
方法是在我SQLiteDBAdapter (NotesDBAdapter)
這是如下:
而在我NotesDBAdapter的onCreate()
是:
@Override
public void onCreate(SQLiteDatabase db) {
SQLiteDatabase checkDB = null;
String myPath = "data/data/com.xxx.xxx/databases/data.db";
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
if (checkDB != null) {
// exists; do nothing
} else {
// create DB
db.execSQL(DATABASE_CREATE);
}
}
再次感謝!
編輯 另一個片段
數據庫的creating a new instance
被稱爲片段2,但我並沒有表現出它的代碼作爲其真的一樣的片段1
我已經編輯我的問題,謝謝**但我的應用力,只要其開閉** – AndroidDev
你的意思是,它是在開放FCing這裏建議甚至之前的任何變化,對不對?這並不排除你在這裏得到的建議。這將有助於查看堆棧跟蹤。你也可以嘗試在onCreate()中設置一個斷點並從那裏開始執行代碼。 –
謝謝。我會試試這個,然後回覆給你+1 – AndroidDev