该应用适用于除平板电脑以外的所有设备。它总是给出错误,我没有关闭数据库,但我确定我每次都关闭。我像这样打开它
objDB = new dbManage(Activity.this);
Items = objDB.select_Users();
objDB.CloseDataBase();
这是我的选择陈述
public ArrayList<Items_OnlineUsers> select_Users() {
ArrayList<Items_OnlineUsers> arrayList_ = new ArrayList<Items_OnlineUsers>();
String qry = "select * from Online left outer join user_ on Online.u_id = user_.id_ ";
Cursor cursor = sqlDB.rawQuery(qry, null);
while (cursor.moveToNext()) {
Items_OnlineUsers u = new Items_OnlineUsers();
u.setId_(cursor.getLong(0));
u.setStatus_(cursor.getInt(1));
u.setRand_(cursor.getLong(3));
u.setName_(cursor.getString(4));
arrayList_.add(u);
}
cursor.close();
return arrayList_;
}
这是logcat
02-03 11:47:42.134: E/AndroidRuntime(1241): java.lang.RuntimeException: An error occured while executing doInBackground()
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.os.AsyncTask$3.done(AsyncTask.java:266)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.lang.Thread.run(Thread.java:1020)
02-03 11:47:42.134: E/AndroidRuntime(1241): Caused by: java.lang.NullPointerException
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:283)
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:116)
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1737)
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1610)
02-03 11:47:42.134: E/AndroidRuntime(1241): at com.ashabe.database.dbManage.add_new_Post(dbManage.java:1395)
02-03 11:47:42.134: E/AndroidRuntime(1241): at com.ashabe.utilityfunction.JsonDecoding.install_JSON_WallPost(JsonDecoding.java:3586)
02-03 11:47:42.134: E/AndroidRuntime(1241): at com.ashabe.www.LoginActivity$loginAsy.doInBackground(LoginActivity.java:232)
02-03 11:47:42.134: E/AndroidRuntime(1241): at com.ashabe.www.LoginActivity$loginAsy.doInBackground(LoginActivity.java:1)
02-03 11:47:42.134: E/AndroidRuntime(1241): at android.os.AsyncTask$2.call(AsyncTask.java:252)
02-03 11:47:42.134: E/AndroidRuntime(1241): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-03 11:47:42.134: E/AndroidRuntime(1241): ... 4 more
02-03 11:47:43.464: E/SQLiteDatabase(1241): close() was never explicitly called on database '/data/data/com.ashabe.www/databases/ashabedb'
02-03 11:47:43.464: E/SQLiteDatabase(1241): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1980)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:977)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:734)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at com.ashabe.database.dbManage.open(dbManage.java:110)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at com.ashabe.database.dbManage.<init>(dbManage.java:95)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at com.ashabe.utilityfunction.JsonDecoding.install_JSON_WallPost(JsonDecoding.java:3585)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at com.ashabe.www.LoginActivity$loginAsy.doInBackground(LoginActivity.java:232)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at com.ashabe.www.LoginActivity$loginAsy.doInBackground(LoginActivity.java:1)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at android.os.AsyncTask$2.call(AsyncTask.java:252)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
02-03 11:47:43.464: E/SQLiteDatabase(1241): at java.lang.Thread.run(Thread.java:1020)
02-03 11:47:49.254: E/SqliteCursor.cpp(1241): Invalid statement in fillWindow()
这是我的数据库助手
public class dbManage {
private dataB obj;
protected static SQLiteDatabase sqlDB;
public dbManage(Context context) {
obj = new dataB(context);
try {
open();
} catch (SQLException e) {
e.printStackTrace();
}
/**/
}
public void openDataBase(Context context) throws SQLException {
sqlDB = obj.getWritableDatabase();
}
public void open() throws SQLException {
sqlDB = obj.getWritableDatabase();
}
public void CloseDataBase() {
obj.close();
sqlDB.close();
}
}
这是数据库
public class dataB extends SQLiteOpenHelper {
static String dBname = "xxx";
static int v = 1;
public dataB(Context context) {
super(context, dBname, null, v);
}
}