我的一段android代码遇到了一些问题,崩溃似乎发生在c.moveToFirst()
。我试图得到一个计数,并且如果游标结果大于0,则为0。然后执行该代码,但这无济于事。
我无法在我的应用程序上重现此错误(我已经尝试了几种方案),但是,通过Google Dev Console,我看到正在使用我的应用程序的其他人都收到了此错误。
预先感谢
崩溃错误:
java.lang.IllegalStateException:
at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked (SQLiteConnectionPool.java:1198)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection (SQLiteConnectionPool.java:808)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection (SQLiteConnectionPool.java:534)
at android.database.sqlite.SQLiteSession.acquireConnection (SQLiteSession.java:904)
at android.database.sqlite.SQLiteSession.executeForCursorWindow (SQLiteSession.java:834)
at android.database.sqlite.SQLiteQuery.fillWindow (SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow (SQLiteCursor.java:152)
at android.database.sqlite.SQLiteCursor.getCount (SQLiteCursor.java:141)
at com.andre3.wzlimitdistraction.dao.Dao.read (Dao.java:101)
at com.andre3.wzlimitdistraction.utils.MonitorService$2.run (MonitorService.java:201)
at java.util.TimerThread.mainLoop (Timer.java:555)
at java.util.TimerThread.run (Timer.java:505)
导致该问题的代码:
ArrayList<UserApps> arr = new ArrayList<UserApps>();
int profileId = 0;
SQLiteDatabase getDb = db.getReadableDatabase();
if(getDb.isOpen()) {
String[] columns = {Dbinfo.app.toString(), Dbinfo.app_name.toString(), Dbinfo.start_duration.toString(), Dbinfo.active_duration.toString(), Dbinfo.start_time.toString(), Dbinfo.profile_id.toString()};
String selection = Dbinfo.app.toString() + " =? and " + Dbinfo.profile_id.toString() + " <=?";
String[] selectionArgs = {id, String.valueOf(profileId)};
Cursor c = getDb.query("user_apps", columns, selection, selectionArgs, null, null, null);
if((c.getCount() > 0) && (c !=null)) {
if (c.moveToFirst()) {
do {
UserApps form = new UserApps();
form.setPkg(c.getString(c.getColumnIndex(Dbinfo.app.toString())));
form.setName(c.getString(c.getColumnIndex(Dbinfo.app_name.toString())));
arr.add(form);
} while (c.moveToNext());
}
}
getDb.close();
c.close();
}
return arr;